kubernetes的dashboard界面部署


   kubernetes这个名字起源于古希腊,是舵手的意思,所以它的Logo既像一张渔网,又像一个罗盘。谷歌采用这个名字的深意就是:既然Docker把自己定位为驮着集装箱在大海上自在遨游的鲸鱼,那么谷歌就是要以kubernetes掌舵大航海时代的话语权,"捕获"和"指引"这条鲸鱼按照"主人"设定的路线巡游,确保谷歌倾力打造的新一代容器世界的宏伟蓝图实现。kubernetes之所以叫k8s,是因为k和s之间有8个字母。

k8s的部署环境如下:

系统:CentOS7.6

docker版本:docker-ce-18.06.1

kubernetes版本:v1.19.0

主机IP:master(192.168.121.201)node1(192.168.121.202)node2(192.168.121.203)

下面采用kubeadm部署方式以master节点为例:

#master节点
#1.设置主机名
hostnamectl set-hostname master

#2.配置域名解析
echo '192.168.121.201 master' >>/etc/hosts
echo '192.168.121.202 node1' >>/etc/hosts
echo '192.168.121.203 node2' >>/etc/hosts

#3.配置selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0

#4.配置防火墙
systemctl stop firewalld && systemctl disable firewalld

#5.配置时钟同步
yum -y install chrony
sed -i 's/^server/#&/g' /etc/chrony.conf
sed -i '2a server time.windows.com iburst' /etc/chrony.conf

#6.永久关闭交换分区
sed -i 's/.*centos-swap.*/#&/g' /etc/fstab
swapoff -a

#7.安装基础软件
yum -y install wget expect vim net-tools ntp bash-completion ipvsadm ipset jq iptables conntrack sysstat libseccomp

#8.安装docker的必备软件
yum -y install yum-utils device-mapper-persistent-data lvm2

#9.添加docker源,安装docker-ce-18.06.1版本
yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-18.06.1.ce-3.el7

#10.设置docker启动和开机启动
systemctl start docker && systemctl enable docker

#11.配置docker镜像加速器
cat >/etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

EOF

#12.重新启动docker确保docker镜像加速器能启动
systemctl daemon-reload && systemctl restart docker

#13.加载IPVS模块
cat > /etc/sysconfig/modules/ipvs.modules <#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done

EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

#14.内核参数优化
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp.keepaliv.probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp.max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp.max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.top_timestamps = 0
net.core.somaxconn = 16384

EOF

#15.立即生效
sysctl --system

#16.配置Kubernetes源,安装k8s
cat > /etc/yum.repos.d/kubernetes.repo <[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

yum install -y kubelet-1.19.0-0 kubeadm-1.19.0-0 kubectl-1.19.0-0

#17.配置和启动kubelet
cat >/etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

EOF

systemctl daemon-reload
systemctl restart kubelet && systemctl enable kubelet

#(node1和node2执行到此处)

#18.节点初始化
kubeadm init --kubernetes-version=1.19.0 --apiserver-advertise-address=192.168.121.201 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

node1和node2也执行成功后可将master节点初始化后显示的命令在node节点执行,然后master节点执行kube-flannel.yml文件。命令为:kubectl apply -f kube-flannel.yml

执行后等待数分钟master节点执行kubectl get node查看到如下所示:

 接下来执行两个yml文件

kubectl create -f execute.yml
kubectl create -f kubernetes-dashboard.yml

删除旧证书创建新证书

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt -n kubernetes-dashboard

然后在此处添加内容:

- --tls-key-file=apiserver.key
- --tls-cert-file=apiserver.crt

添加后执行此命令:kubectl apply -f kubernetes-dashboard.yml 

最后执行:kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

上条命令执行后会生成一条长串的token值,将token值复制然后用浏览器访问master的IP加上端口号。登录选项选择token值登录,然后将复制的token值粘贴

注:配置文件里的端口号为30001

登录后的界面如下所示:

 文章涉及的yml文件如下:

  1 ---
  2 apiVersion: policy/v1beta1
  3 kind: PodSecurityPolicy
  4 metadata:
  5   name: psp.flannel.unprivileged
  6   annotations:
  7     seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
  8     seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
  9     apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
 10     apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
 11 spec:
 12   privileged: false
 13   volumes:
 14     - configMap
 15     - secret
 16     - emptyDir
 17     - hostPath
 18   allowedHostPaths:
 19     - pathPrefix: "/etc/cni/net.d"
 20     - pathPrefix: "/etc/kube-flannel"
 21     - pathPrefix: "/run/flannel"
 22   readOnlyRootFilesystem: false
 23   # Users and groups
 24   runAsUser:
 25     rule: RunAsAny
 26   supplementalGroups:
 27     rule: RunAsAny
 28   fsGroup:
 29     rule: RunAsAny
 30   # Privilege Escalation
 31   allowPrivilegeEscalation: false
 32   defaultAllowPrivilegeEscalation: false
 33   # Capabilities
 34   allowedCapabilities: ['NET_ADMIN']
 35   defaultAddCapabilities: []
 36   requiredDropCapabilities: []
 37   # Host namespaces
 38   hostPID: false
 39   hostIPC: false
 40   hostNetwork: true
 41   hostPorts:
 42   - min: 0
 43     max: 65535
 44   # SELinux
 45   seLinux:
 46     # SELinux is unused in CaaSP
 47     rule: 'RunAsAny'
 48 ---
 49 kind: ClusterRole
 50 apiVersion: rbac.authorization.k8s.io/v1
 51 metadata:
 52   name: flannel
 53 rules:
 54   - apiGroups: ['extensions']
 55     resources: ['podsecuritypolicies']
 56     verbs: ['use']
 57     resourceNames: ['psp.flannel.unprivileged']
 58   - apiGroups:
 59       - ""
 60     resources:
 61       - pods
 62     verbs:
 63       - get
 64   - apiGroups:
 65       - ""
 66     resources:
 67       - nodes
 68     verbs:
 69       - list
 70       - watch
 71   - apiGroups:
 72       - ""
 73     resources:
 74       - nodes/status
 75     verbs:
 76       - patch
 77 ---
 78 kind: ClusterRoleBinding
 79 apiVersion: rbac.authorization.k8s.io/v1
 80 metadata:
 81   name: flannel
 82 roleRef:
 83   apiGroup: rbac.authorization.k8s.io
 84   kind: ClusterRole
 85   name: flannel
 86 subjects:
 87 - kind: ServiceAccount
 88   name: flannel
 89   namespace: kube-system
 90 ---
 91 apiVersion: v1
 92 kind: ServiceAccount
 93 metadata:
 94   name: flannel
 95   namespace: kube-system
 96 ---
 97 kind: ConfigMap
 98 apiVersion: v1
 99 metadata:
100   name: kube-flannel-cfg
101   namespace: kube-system
102   labels:
103     tier: node
104     app: flannel
105 data:
106   cni-conf.json: |
107     {
108       "name": "cbr0",
109       "cniVersion": "0.3.1",
110       "plugins": [
111         {
112           "type": "flannel",
113           "delegate": {
114             "hairpinMode": true,
115             "isDefaultGateway": true
116           }
117         },
118         {
119           "type": "portmap",
120           "capabilities": {
121             "portMappings": true
122           }
123         }
124       ]
125     }
126   net-conf.json: |
127     {
128       "Network": "10.244.0.0/16",
129       "Backend": {
130         "Type": "vxlan"
131       }
132     }
133 ---
134 apiVersion: apps/v1
135 kind: DaemonSet
136 metadata:
137   name: kube-flannel-ds-amd64
138   namespace: kube-system
139   labels:
140     tier: node
141     app: flannel
142 spec:
143   selector:
144     matchLabels:
145       app: flannel
146   template:
147     metadata:
148       labels:
149         tier: node
150         app: flannel
151     spec:
152       affinity:
153         nodeAffinity:
154           requiredDuringSchedulingIgnoredDuringExecution:
155             nodeSelectorTerms:
156               - matchExpressions:
157                   - key: beta.kubernetes.io/os
158                     operator: In
159                     values:
160                       - linux
161                   - key: beta.kubernetes.io/arch
162                     operator: In
163                     values:
164                       - amd64
165       hostNetwork: true
166       tolerations:
167       - operator: Exists
168         effect: NoSchedule
169       serviceAccountName: flannel
170       initContainers:
171       - name: install-cni
172         image: quay.io/coreos/flannel:v0.12.0-amd64
173         command:
174         - cp
175         args:
176         - -f
177         - /etc/kube-flannel/cni-conf.json
178         - /etc/cni/net.d/10-flannel.conflist
179         volumeMounts:
180         - name: cni
181           mountPath: /etc/cni/net.d
182         - name: flannel-cfg
183           mountPath: /etc/kube-flannel/
184       containers:
185       - name: kube-flannel
186         image: quay.io/coreos/flannel:v0.12.0-amd64
187         command:
188         - /opt/bin/flanneld
189         args:
190         - --ip-masq
191         - --kube-subnet-mgr
192         resources:
193           requests:
194             cpu: "100m"
195             memory: "50Mi"
196           limits:
197             cpu: "100m"
198             memory: "50Mi"
199         securityContext:
200           privileged: false
201           capabilities:
202             add: ["NET_ADMIN"]
203         env:
204         - name: POD_NAME
205           valueFrom:
206             fieldRef:
207               fieldPath: metadata.name
208         - name: POD_NAMESPACE
209           valueFrom:
210             fieldRef:
211               fieldPath: metadata.namespace
212         volumeMounts:
213         - name: run
214           mountPath: /run/flannel
215         - name: flannel-cfg
216           mountPath: /etc/kube-flannel/
217       volumes:
218         - name: run
219           hostPath:
220             path: /run/flannel
221         - name: cni
222           hostPath:
223             path: /etc/cni/net.d
224         - name: flannel-cfg
225           configMap:
226             name: kube-flannel-cfg
227 ---
228 apiVersion: apps/v1
229 kind: DaemonSet
230 metadata:
231   name: kube-flannel-ds-arm64
232   namespace: kube-system
233   labels:
234     tier: node
235     app: flannel
236 spec:
237   selector:
238     matchLabels:
239       app: flannel
240   template:
241     metadata:
242       labels:
243         tier: node
244         app: flannel
245     spec:
246       affinity:
247         nodeAffinity:
248           requiredDuringSchedulingIgnoredDuringExecution:
249             nodeSelectorTerms:
250               - matchExpressions:
251                   - key: beta.kubernetes.io/os
252                     operator: In
253                     values:
254                       - linux
255                   - key: beta.kubernetes.io/arch
256                     operator: In
257                     values:
258                       - arm64
259       hostNetwork: true
260       tolerations:
261       - operator: Exists
262         effect: NoSchedule
263       serviceAccountName: flannel
264       initContainers:
265       - name: install-cni
266         image: quay.io/coreos/flannel:v0.12.0-arm64
267         command:
268         - cp
269         args:
270         - -f
271         - /etc/kube-flannel/cni-conf.json
272         - /etc/cni/net.d/10-flannel.conflist
273         volumeMounts:
274         - name: cni
275           mountPath: /etc/cni/net.d
276         - name: flannel-cfg
277           mountPath: /etc/kube-flannel/
278       containers:
279       - name: kube-flannel
280         image: quay.io/coreos/flannel:v0.12.0-arm64
281         command:
282         - /opt/bin/flanneld
283         args:
284         - --ip-masq
285         - --kube-subnet-mgr
286         resources:
287           requests:
288             cpu: "100m"
289             memory: "50Mi"
290           limits:
291             cpu: "100m"
292             memory: "50Mi"
293         securityContext:
294           privileged: false
295           capabilities:
296              add: ["NET_ADMIN"]
297         env:
298         - name: POD_NAME
299           valueFrom:
300             fieldRef:
301               fieldPath: metadata.name
302         - name: POD_NAMESPACE
303           valueFrom:
304             fieldRef:
305               fieldPath: metadata.namespace
306         volumeMounts:
307         - name: run
308           mountPath: /run/flannel
309         - name: flannel-cfg
310           mountPath: /etc/kube-flannel/
311       volumes:
312         - name: run
313           hostPath:
314             path: /run/flannel
315         - name: cni
316           hostPath:
317             path: /etc/cni/net.d
318         - name: flannel-cfg
319           configMap:
320             name: kube-flannel-cfg
321 ---
322 apiVersion: apps/v1
323 kind: DaemonSet
324 metadata:
325   name: kube-flannel-ds-arm
326   namespace: kube-system
327   labels:
328     tier: node
329     app: flannel
330 spec:
331   selector:
332     matchLabels:
333       app: flannel
334   template:
335     metadata:
336       labels:
337         tier: node
338         app: flannel
339     spec:
340       affinity:
341         nodeAffinity:
342           requiredDuringSchedulingIgnoredDuringExecution:
343             nodeSelectorTerms:
344               - matchExpressions:
345                   - key: beta.kubernetes.io/os
346                     operator: In
347                     values:
348                       - linux
349                   - key: beta.kubernetes.io/arch
350                     operator: In
351                     values:
352                       - arm
353       hostNetwork: true
354       tolerations:
355       - operator: Exists
356         effect: NoSchedule
357       serviceAccountName: flannel
358       initContainers:
359       - name: install-cni
360         image: quay.io/coreos/flannel:v0.12.0-arm
361         command:
362         - cp
363         args:
364         - -f
365         - /etc/kube-flannel/cni-conf.json
366         - /etc/cni/net.d/10-flannel.conflist
367         volumeMounts:
368         - name: cni
369           mountPath: /etc/cni/net.d
370         - name: flannel-cfg
371           mountPath: /etc/kube-flannel/
372       containers:
373       - name: kube-flannel
374         image: quay.io/coreos/flannel:v0.12.0-arm
375         command:
376         - /opt/bin/flanneld
377         args:
378         - --ip-masq
379         - --kube-subnet-mgr
380         resources:
381           requests:
382             cpu: "100m"
383             memory: "50Mi"
384           limits:
385             cpu: "100m"
386             memory: "50Mi"
387         securityContext:
388           privileged: false
389           capabilities:
390              add: ["NET_ADMIN"]
391         env:
392         - name: POD_NAME
393           valueFrom:
394             fieldRef:
395               fieldPath: metadata.name
396         - name: POD_NAMESPACE
397           valueFrom:
398             fieldRef:
399               fieldPath: metadata.namespace
400         volumeMounts:
401         - name: run
402           mountPath: /run/flannel
403         - name: flannel-cfg
404           mountPath: /etc/kube-flannel/
405       volumes:
406         - name: run
407           hostPath:
408             path: /run/flannel
409         - name: cni
410           hostPath:
411             path: /etc/cni/net.d
412         - name: flannel-cfg
413           configMap:
414             name: kube-flannel-cfg
415 ---
416 apiVersion: apps/v1
417 kind: DaemonSet
418 metadata:
419   name: kube-flannel-ds-ppc64le
420   namespace: kube-system
421   labels:
422     tier: node
423     app: flannel
424 spec:
425   selector:
426     matchLabels:
427       app: flannel
428   template:
429     metadata:
430       labels:
431         tier: node
432         app: flannel
433     spec:
434       affinity:
435         nodeAffinity:
436           requiredDuringSchedulingIgnoredDuringExecution:
437             nodeSelectorTerms:
438               - matchExpressions:
439                   - key: beta.kubernetes.io/os
440                     operator: In
441                     values:
442                       - linux
443                   - key: beta.kubernetes.io/arch
444                     operator: In
445                     values:
446                       - ppc64le
447       hostNetwork: true
448       tolerations:
449       - operator: Exists
450         effect: NoSchedule
451       serviceAccountName: flannel
452       initContainers:
453       - name: install-cni
454         image: quay.io/coreos/flannel:v0.12.0-ppc64le
455         command:
456         - cp
457         args:
458         - -f
459         - /etc/kube-flannel/cni-conf.json
460         - /etc/cni/net.d/10-flannel.conflist
461         volumeMounts:
462         - name: cni
463           mountPath: /etc/cni/net.d
464         - name: flannel-cfg
465           mountPath: /etc/kube-flannel/
466       containers:
467       - name: kube-flannel
468         image: quay.io/coreos/flannel:v0.12.0-ppc64le
469         command:
470         - /opt/bin/flanneld
471         args:
472         - --ip-masq
473         - --kube-subnet-mgr
474         resources:
475           requests:
476             cpu: "100m"
477             memory: "50Mi"
478           limits:
479             cpu: "100m"
480             memory: "50Mi"
481         securityContext:
482           privileged: false
483           capabilities:
484              add: ["NET_ADMIN"]
485         env:
486         - name: POD_NAME
487           valueFrom:
488             fieldRef:
489               fieldPath: metadata.name
490         - name: POD_NAMESPACE
491           valueFrom:
492             fieldRef:
493               fieldPath: metadata.namespace
494         volumeMounts:
495         - name: run
496           mountPath: /run/flannel
497         - name: flannel-cfg
498           mountPath: /etc/kube-flannel/
499       volumes:
500         - name: run
501           hostPath:
502             path: /run/flannel
503         - name: cni
504           hostPath:
505             path: /etc/cni/net.d
506         - name: flannel-cfg
507           configMap:
508             name: kube-flannel-cfg
509 ---
510 apiVersion: apps/v1
511 kind: DaemonSet
512 metadata:
513   name: kube-flannel-ds-s390x
514   namespace: kube-system
515   labels:
516     tier: node
517     app: flannel
518 spec:
519   selector:
520     matchLabels:
521       app: flannel
522   template:
523     metadata:
524       labels:
525         tier: node
526         app: flannel
527     spec:
528       affinity:
529         nodeAffinity:
530           requiredDuringSchedulingIgnoredDuringExecution:
531             nodeSelectorTerms:
532               - matchExpressions:
533                   - key: beta.kubernetes.io/os
534                     operator: In
535                     values:
536                       - linux
537                   - key: beta.kubernetes.io/arch
538                     operator: In
539                     values:
540                       - s390x
541       hostNetwork: true
542       tolerations:
543       - operator: Exists
544         effect: NoSchedule
545       serviceAccountName: flannel
546       initContainers:
547       - name: install-cni
548         image: quay.io/coreos/flannel:v0.12.0-s390x
549         command:
550         - cp
551         args:
552         - -f
553         - /etc/kube-flannel/cni-conf.json
554         - /etc/cni/net.d/10-flannel.conflist
555         volumeMounts:
556         - name: cni
557           mountPath: /etc/cni/net.d
558         - name: flannel-cfg
559           mountPath: /etc/kube-flannel/
560       containers:
561       - name: kube-flannel
562         image: quay.io/coreos/flannel:v0.12.0-s390x
563         command:
564         - /opt/bin/flanneld
565         args:
566         - --ip-masq
567         - --kube-subnet-mgr
568         resources:
569           requests:
570             cpu: "100m"
571             memory: "50Mi"
572           limits:
573             cpu: "100m"
574             memory: "50Mi"
575         securityContext:
576           privileged: false
577           capabilities:
578              add: ["NET_ADMIN"]
579         env:
580         - name: POD_NAME
581           valueFrom:
582             fieldRef:
583               fieldPath: metadata.name
584         - name: POD_NAMESPACE
585           valueFrom:
586             fieldRef:
587               fieldPath: metadata.namespace
588         volumeMounts:
589         - name: run
590           mountPath: /run/flannel
591         - name: flannel-cfg
592           mountPath: /etc/kube-flannel/
593       volumes:
594         - name: run
595           hostPath:
596             path: /run/flannel
597         - name: cni
598           hostPath:
599             path: /etc/cni/net.d
600         - name: flannel-cfg
601           configMap:
602             name: kube-flannel-cfg
kube-flannel.yml
  1 # Copyright 2017 The Kubernetes Authors.
  2 #
  3 # Licensed under the Apache License, Version 2.0 (the "License");
  4 # you may not use this file except in compliance with the License.
  5 # You may obtain a copy of the License at
  6 #
  7 #     http://www.apache.org/licenses/LICENSE-2.0
  8 #
  9 # Unless required by applicable law or agreed to in writing, software
 10 # distributed under the License is distributed on an "AS IS" BASIS,
 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12 # See the License for the specific language governing permissions and
 13 # limitations under the License.
 14 
 15 apiVersion: v1
 16 kind: Namespace
 17 metadata:
 18   name: kubernetes-dashboard
 19 
 20 ---
 21 
 22 apiVersion: v1
 23 kind: ServiceAccount
 24 metadata:
 25   labels:
 26     k8s-app: kubernetes-dashboard
 27   name: kubernetes-dashboard
 28   namespace: kubernetes-dashboard
 29 
 30 ---
 31 
 32 kind: Service
 33 apiVersion: v1
 34 metadata:
 35   labels:
 36     k8s-app: kubernetes-dashboard
 37   name: kubernetes-dashboard
 38   namespace: kubernetes-dashboard
 39 spec:
 40   type: NodePort
 41   ports:
 42     - port: 443
 43       targetPort: 8443
 44       nodePort: 30001
 45   selector:
 46     k8s-app: kubernetes-dashboard
 47 
 48 ---
 49 
 50 apiVersion: v1
 51 kind: Secret
 52 metadata:
 53   labels:
 54     k8s-app: kubernetes-dashboard
 55   name: kubernetes-dashboard-certs
 56   namespace: kubernetes-dashboard
 57 type: Opaque
 58 
 59 ---
 60 
 61 apiVersion: v1
 62 kind: Secret
 63 metadata:
 64   labels:
 65     k8s-app: kubernetes-dashboard
 66   name: kubernetes-dashboard-csrf
 67   namespace: kubernetes-dashboard
 68 type: Opaque
 69 data:
 70   csrf: ""
 71 
 72 ---
 73 
 74 apiVersion: v1
 75 kind: Secret
 76 metadata:
 77   labels:
 78     k8s-app: kubernetes-dashboard
 79   name: kubernetes-dashboard-key-holder
 80   namespace: kubernetes-dashboard
 81 type: Opaque
 82 
 83 ---
 84 
 85 kind: ConfigMap
 86 apiVersion: v1
 87 metadata:
 88   labels:
 89     k8s-app: kubernetes-dashboard
 90   name: kubernetes-dashboard-settings
 91   namespace: kubernetes-dashboard
 92 
 93 ---
 94 
 95 kind: Role
 96 apiVersion: rbac.authorization.k8s.io/v1
 97 metadata:
 98   labels:
 99     k8s-app: kubernetes-dashboard
100   name: kubernetes-dashboard
101   namespace: kubernetes-dashboard
102 rules:
103   # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
104   - apiGroups: [""]
105     resources: ["secrets"]
106     resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
107     verbs: ["get", "update", "delete"]
108     # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
109   - apiGroups: [""]
110     resources: ["configmaps"]
111     resourceNames: ["kubernetes-dashboard-settings"]
112     verbs: ["get", "update"]
113     # Allow Dashboard to get metrics.
114   - apiGroups: [""]
115     resources: ["services"]
116     resourceNames: ["heapster", "dashboard-metrics-scraper"]
117     verbs: ["proxy"]
118   - apiGroups: [""]
119     resources: ["services/proxy"]
120     resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
121     verbs: ["get"]
122 
123 ---
124 
125 kind: ClusterRole
126 apiVersion: rbac.authorization.k8s.io/v1
127 metadata:
128   labels:
129     k8s-app: kubernetes-dashboard
130   name: kubernetes-dashboard
131 rules:
132   # Allow Metrics Scraper to get metrics from the Metrics server
133   - apiGroups: ["metrics.k8s.io"]
134     resources: ["pods", "nodes"]
135     verbs: ["get", "list", "watch"]
136 
137 ---
138 
139 apiVersion: rbac.authorization.k8s.io/v1
140 kind: RoleBinding
141 metadata:
142   labels:
143     k8s-app: kubernetes-dashboard
144   name: kubernetes-dashboard
145   namespace: kubernetes-dashboard
146 roleRef:
147   apiGroup: rbac.authorization.k8s.io
148   kind: Role
149   name: kubernetes-dashboard
150 subjects:
151   - kind: ServiceAccount
152     name: kubernetes-dashboard
153     namespace: kubernetes-dashboard
154 
155 ---
156 
157 apiVersion: rbac.authorization.k8s.io/v1
158 kind: ClusterRoleBinding
159 metadata:
160   name: kubernetes-dashboard
161 roleRef:
162   apiGroup: rbac.authorization.k8s.io
163   kind: ClusterRole
164   name: kubernetes-dashboard
165 subjects:
166   - kind: ServiceAccount
167     name: kubernetes-dashboard
168     namespace: kubernetes-dashboard
169 
170 ---
171 
172 kind: Deployment
173 apiVersion: apps/v1
174 metadata:
175   labels:
176     k8s-app: kubernetes-dashboard
177   name: kubernetes-dashboard
178   namespace: kubernetes-dashboard
179 spec:
180   replicas: 1
181   revisionHistoryLimit: 10
182   selector:
183     matchLabels:
184       k8s-app: kubernetes-dashboard
185   template:
186     metadata:
187       labels:
188         k8s-app: kubernetes-dashboard
189     spec:
190       containers:
191         - name: kubernetes-dashboard
192           image: kubernetesui/dashboard:v2.0.0-beta8
193           imagePullPolicy: Always
194           ports:
195             - containerPort: 8443
196               protocol: TCP
197           args:
198             - --auto-generate-certificates
199             - --namespace=kubernetes-dashboard
200             # Uncomment the following line to manually specify Kubernetes API server Host
201             # If not specified, Dashboard will attempt to auto discover the API server and connect
202             # to it. Uncomment only if the default does not work.
203             # - --apiserver-host=http://my-address:port
204           volumeMounts:
205             - name: kubernetes-dashboard-certs
206               mountPath: /certs
207               # Create on-disk volume to store exec logs
208             - mountPath: /tmp
209               name: tmp-volume
210           livenessProbe:
211             httpGet:
212               scheme: HTTPS
213               path: /
214               port: 8443
215             initialDelaySeconds: 30
216             timeoutSeconds: 30
217           securityContext:
218             allowPrivilegeEscalation: false
219             readOnlyRootFilesystem: true
220             runAsUser: 1001
221             runAsGroup: 2001
222       volumes:
223         - name: kubernetes-dashboard-certs
224           secret:
225             secretName: kubernetes-dashboard-certs
226         - name: tmp-volume
227           emptyDir: {}
228       serviceAccountName: kubernetes-dashboard
229       nodeSelector:
230         "beta.kubernetes.io/os": linux
231       # Comment the following tolerations if Dashboard must not be deployed on master
232       tolerations:
233         - key: node-role.kubernetes.io/master
234           effect: NoSchedule
235 
236 ---
237 
238 kind: Service
239 apiVersion: v1
240 metadata:
241   labels:
242     k8s-app: dashboard-metrics-scraper
243   name: dashboard-metrics-scraper
244   namespace: kubernetes-dashboard
245 spec:
246   ports:
247     - port: 8000
248       targetPort: 8000
249   selector:
250     k8s-app: dashboard-metrics-scraper
251 
252 ---
253 
254 kind: Deployment
255 apiVersion: apps/v1
256 metadata:
257   labels:
258     k8s-app: dashboard-metrics-scraper
259   name: dashboard-metrics-scraper
260   namespace: kubernetes-dashboard
261 spec:
262   replicas: 1
263   revisionHistoryLimit: 10
264   selector:
265     matchLabels:
266       k8s-app: dashboard-metrics-scraper
267   template:
268     metadata:
269       labels:
270         k8s-app: dashboard-metrics-scraper
271       annotations:
272         seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
273     spec:
274       containers:
275         - name: dashboard-metrics-scraper
276           image: kubernetesui/metrics-scraper:v1.0.1
277           ports:
278             - containerPort: 8000
279               protocol: TCP
280           livenessProbe:
281             httpGet:
282               scheme: HTTP
283               path: /
284               port: 8000
285             initialDelaySeconds: 30
286             timeoutSeconds: 30
287           volumeMounts:
288           - mountPath: /tmp
289             name: tmp-volume
290           securityContext:
291             allowPrivilegeEscalation: false
292             readOnlyRootFilesystem: true
293             runAsUser: 1001
294             runAsGroup: 2001
295       serviceAccountName: kubernetes-dashboard
296       nodeSelector:
297         "beta.kubernetes.io/os": linux
298       # Comment the following tolerations if Dashboard must not be deployed on master
299       tolerations:
300         - key: node-role.kubernetes.io/master
301           effect: NoSchedule
302       volumes:
303         - name: tmp-volume
304           emptyDir: {}
kubernetes-dashboard.yml
 1 # Create Service Account
 2 apiVersion: v1
 3 kind: ServiceAccount
 4 metadata:
 5   name: admin-user
 6   namespace: kube-system
 7 ---
 8 # Create ClusterRoleBinding
 9 apiVersion: rbac.authorization.k8s.io/v1
10 kind: ClusterRoleBinding
11 metadata:
12   name: admin-user
13 roleRef:
14   apiGroup: rbac.authorization.k8s.io
15   kind: ClusterRole
16   name: cluster-admin
17 subjects:
18 - kind: ServiceAccount
19   name: admin-user
20   namespace: kube-system
execute.yml

相关