(1)了解Kubernetes容器云平台的架构。
(2)了解Kubernetes容器云平台的基本原理。
(3)掌握使用Kubeadm部署Kubernetes集群。
该案例使用两台节点操作,一台作为Master
节点,一台作为Node
节点,IP自拟、互通
所有节点使用CentOS_7.5.1804系统,保持网络通畅。
1.1、配置Yum源
所有节点将提供的压缩包K8S.tar.gz上传至/root目录并解压
[root@master ~]# tar -zxvf K8S.tar.gz
所有节点配置本地Yum源(可使用FTP方式共享源)
[root@master ~]# mv /etc/yum.repos.d/* /opt/
[root@master ~]# vi /etc/yum.repos.d/local.repo
[root@master ~]# cat /etc/yum.repos.d/local.repo
[kubernetes]
name=kubernets
baseurl=file:///root/Kubernetes
gpgcheck=0
enable=1
[root@master ~]# yum clean all && yum repolist
已加载插件:fastestmirror, langpacks
正在清理软件源: kubernetes
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
kubernetes | 2.9 kB 00:00:00
kubernetes/primary_db | 777 kB 00:00:00
源标识 源名称 状态
kubernetes kubernets 341
repolist: 341
1.2、升级系统内核
所有节点升级系统内核
[root@master ~]# yum update -y
1.3、配置主机映射
所有节点,修改/etc/hosts文件,添加所有节点IP映射
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.10 master
192.168.200.20 node
1.4、配置防火墙及SELinux
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@master ~]# iptables -F
[root@master ~]# iptables -X
[root@master ~]# iptables -Z
[root@master ~]# iptables-save
[root@master ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled #将模式修改为关闭
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@master ~]# reboot
1.5、关闭Swap
ps:Kubernetes的想法是将实例紧密包装到尽可能的100%。所有的部署应该与CPU和内存限制固定在一起。所以如果调度程序发送一个Pod到一台机器,他不应该使用交换。设计者不想交换,因为它会减慢速度。所以关闭Swap主要是为了性能考虑。
所有节点关闭Swap。
[root@master ~]# swapoff -a
#注释掉swap分区的挂载参数
[root@master ~]# vi /etc/fstab
[root@master ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Dec 1 23:20:42 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=f5f9f5ed-48e9-4255-9685-672e00971ebb /boot xfs defaults 0 0
#/dev/mapper/centos-swap swap swap defaults 0 0
[root@master ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 228M 1.3G 9.5M 295M 1.4G
Swap: 0B 0B 0B
1.6、配置时间同步
所有节点安装chrony服务
[root@master ~]# yum install -y chrony
master节点
修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其它节点同步时间
[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf
然后再追加以下内容
local stratum 10
server master iburst
allow all
maseter节点重启chronyd服务并设为开机启动,开启网络时间同步功能。
[root@master ~]# systemctl enable chronyd && systemctl restart chronyd
node节点
修改/etc/chrony.conf文件,指定内网master节点为上游NTP服务器,重启服务并设为开机启动。
[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@node ~]# echo server 192.168.200.10 iburst >> /etc/chrony.conf
[root@node ~]# systemctl enable chronyd && systemctl restart chronyd
所有节点执行chronyc sources
命令,查询结果中如果存在以“^*
”开头的行,即说明已经同步成功。
[root@master ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* master 10 6 377 316 -6ns[ -12us] +/- 17us
[root@node ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* master 11 6 77 12 -5670ns[ -22us] +/- 6071us
1.7、配置路由转发
RHEL/CentOS上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题,所以需要在各个节点开启路由转发。
所有节点创建/etc/sysctl.d/k8s.conf
文件,添加如下内容。
[root@master ~]# vi /etc/sysctl.d/k8s.conf
[root@master ~]# cat /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@master ~]# modprobe br_netfilter
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
1.8、配置IPVS
由于IPVS已经加入到了内核的主干,所以为kube-proxy
开启IPVS的前提需要加载以下内核模块。
在所有节点执行以下操作。
[root@master ~]# vi /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
[root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4 15053 0
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 139264 2 ip_vs,nf_conntrack_ipv4
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
以上脚本创建了/etc/sysconfig/modules/ipvs.modules
文件,保证在节点重启后能自动加载所需模块。使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4
命令查看是否已经正确加载所需的内核模块。
所有节点安装ipset软件包。
[root@master ~]# yum install ipset ipvsadm -y
1.9、安装Docker
Kubernetes默认的容器运行时仍然是Docker,使用Kubelet中内置dockershim CRI
实现。需要注意的是,由于在Kubernetes1.14版本中,支持的版本有1.13.1、17.03、17.06、17.09、18.06和18.09,所以这里统一使用Docker 18.09。
所有节点配置Docker Yum源并安装Docker,启动Docker引擎并设置开机自启,步骤参考Docker引擎安装的2.2及之后步骤。
我们安装的docker使用的文件驱动是systemd,需要文件驱动由默认systemd改成cgroupfs,否则造成驱动不一致, 导致镜像无法启动。
[root@master ~]# cat /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker
[root@master ~]# ./kubernetes_base.sh
[root@master ~]# docker info | grep Cgroup
Cgroup Driver: systemd
2.1、配置Kubernetes Yum源
所有节点配置Kubernetes源。Kubernetes源可以采用下面的网络源,也可以采用上述配置的本地Yum源。
[root@master ~]# cat /etc/yum.repos.d/local.repo
[kubernetes]
name=kubernets
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
repo_gpgcheck=0
gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2.2、安装工具
Kubelet
负责与其它节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm
是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl
是Kubernetes集群管理工具。
所有节点安装Kubernetes工具并启动Kubeket。
[root@master ~]# yum install kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1 -y
[root@master ~]# systemctl enable kubelet && systemctl start kubelet
#现在启动不成功是正常的,稍后初始化的时候会变成功
2.3、初始化Kubernetes集群
登录master节点
,初始化Kubernetes集群。
–pod-network-cidr=10.16.0.0/16的参数值IP段为下文步骤2.4中kube-flannel.yml
文件的网络配置参数,注意一致性。
[root@master ~]# kubeadm init --apiserver-advertise-address 192.168.200.10 --kubernetes-version="v1.14.1" --pod-network-cidr=10.16.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
...省略
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.200.10:6443 --token jakivb.3ih0a5kectmd2djz \
--discovery-token-ca-cert-hash sha256:f1452f22b3e2c78a4ca8365de13c379c7189deeaf84ffb7a4f27650b9ecf824a
#此行报文需记录,用于node节点加入集群
初始化操作主要经历了以下15个步骤,每个阶段均输出使用[步骤名称]
作为开头:
/var/lib/kubelet/config.yaml
,没有这个文件Kubelet无法启动,所以初始化之前的Kubelet实际上启动失败。/etc/kubernetes/pki
目录中。KubeConfig
文件,存放在/etc/kubernetes
目录中,组件之间通信需要使用对应文件。/etc/kubernetes/manifests
目录下的YAML文件,安装Master组件。/etc/kubernetes/manifests/etcd.yaml
安装Etcd服务。control-plan
部署的Master组件启动。configMap
配置Kubelet
。CNI
信息到Node上,通过注释的方式记录。Master
,和不可调度标签
,这样默认就不会使用Master节点来运行Pod。Token
需要记录下来,后面使用Kubeadm join
命令往集群中添加节点时会用到。如:CoreDNS
和kube-proxy
。提示如何配置常规用户使用kubectl访问集群。 提示如何安装 Pod 网络。 提示如何注册其他节点到 Cluster。额外知识补充:依照 kubeadm init 输出的最后提示,推荐用 Linux 普通用户执行 kubectl。
#创建普通用户并设置密码123456
useradd centos && echo "centos:123456" | chpasswd centos
#追加sudo权限,并配置sudo免密
sed -i '/^root/a\centos ALL=(ALL) NOPASSWD:ALL' /etc/sudoers
#保存集群安全配置文件到当前用户.kube目录
su - centos
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#启用 kubectl 命令自动补全功能(注销重新登录生效)
echo "source <(kubectl completion bash)" >> ~/.bashrc
【也可跳过上述配置,直接用root访问kubectl】
Kubectl
默认会在执行的用户home目录下面的.kube
目录下寻找config文件
,配置Kubectl工具。
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
检查集群状态
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
2.4、配置Kubernetes网络
要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。 Kubernetes 支持多种网络方案,这里我们使用 flannel 执行如下步骤部署 flannel:
登录Master节点
,将提供kube-flannel.yml
文件上传至Master节点root目录,使用kubectl apply
命令安装网络。(ps:kube-flannel.yml
这个插件文件可以自行下载-需要梯子,更多解释参考这篇文章)
倘若上述方法都行不通,可以直接新建该文件,然后编写内容如下:
---
kind: Namespace
apiVersion: v1
metadata:
name: kube-flannel
labels:
k8s-app: flannel
pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
k8s-app: flannel
name: flannel
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- nodes/status
verbs:
- patch
- apiGroups:
- networking.k8s.io
resources:
- clustercidrs
verbs:
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
k8s-app: flannel
name: flannel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: flannel
name: flannel
namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
namespace: kube-flannel
labels:
tier: node
k8s-app: flannel
app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: kube-flannel-ds
namespace: kube-flannel
labels:
tier: node
app: flannel
k8s-app: flannel
spec:
selector:
matchLabels:
app: flannel
template:
metadata:
labels:
tier: node
app: flannel
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux
hostNetwork: true
priorityClassName: system-node-critical
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: flannel
initContainers:
- name: install-cni-plugin
image: docker.io/flannel/flannel-cni-plugin:v1.2.0
command:
- cp
args:
- -f
- /flannel
- /opt/cni/bin/flannel
volumeMounts:
- name: cni-plugin
mountPath: /opt/cni/bin
- name: install-cni
image: docker.io/flannel/flannel:v0.22.3
command:
- cp
args:
- -f
- /etc/kube-flannel/cni-conf.json
- /etc/cni/net.d/10-flannel.conflist
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
containers:
- name: kube-flannel
image: docker.io/flannel/flannel:v0.22.3
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
resources:
requests:
cpu: "100m"
memory: "50Mi"
securityContext:
privileged: false
capabilities:
add: ["NET_ADMIN", "NET_RAW"]
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: EVENT_QUEUE_DEPTH
value: "5000"
volumeMounts:
- name: run
mountPath: /run/flannel
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: xtables-lock
mountPath: /run/xtables.lock
volumes:
- name: run
hostPath:
path: /run/flannel
- name: cni-plugin
hostPath:
path: /opt/cni/bin
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
- name: xtables-lock
hostPath:
path: /run/xtables.lock
type: FileOrCreate
[root@master ~]# cp yaml/kube-flannel.yaml ./
[root@master ~]# kubectl apply -f kube-flannel.yaml
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-8686dcc4fd-htr62 1/1 Running 0 107s
coredns-8686dcc4fd-mvsnd 1/1 Running 0 107s
etcd-master 1/1 Running 0 41s
kube-apiserver-master 1/1 Running 0 55s
kube-controller-manager-master 1/1 Running 0 57s
kube-flannel-ds-amd64-plq67 1/1 Running 0 24s
kube-proxy-qfkv2 1/1 Running 0 107s
kube-scheduler-master 1/1 Running 0 65s
可以看到,所有的系统 Pod 都成功启动了,而刚刚部署的flannel网络插件则在 kube-system 下面新建了一个名叫kube-flannel-ds-amd64-plq67
的 Pod,一般来说,这些 Pod 就是容器网络插件在每个节点上的控制组件。 Kubernetes 支持容器网络插件,使用的是一个名叫 CNI 的通用接口,它也是当前容器网络的事实标准,市面上的所有容器网络开源项目都可以通过 CNI 接入 Kubernetes,比如 Flannel、Calico、Canal、Romana 等等,它们的部署方式也都是类似的“一键部署”。至此,Kubernetes 的 Master 节点就部署完成了。如果你只需要一个单节点的 Kubernetes,现在你就可以使用了。不过,在默认情况下,Kubernetes 的 Master 节点是不能运行用户Pod
的。
2.5、Node节点加入集群
Kubernetes
的Worker节点
跟Master节点
几乎是相同的,它们运行着的都是一个kubelet组件
。唯一的区别在于,在kubeadm init
的过程中,kubelet 启动后,Master 节点上还会自动运行kube-apiserver
、kube-scheduler
、kube-controller-manger
这三个系统 Pod
。
登录Node节点,使用kubeadm join命令将Node节点加入集群。
#ps:如果之前执行kubeadm init时没有记录下加入集群的指令,可以在master节点上使用以下命令查询
#kubeadm token create --print-join-command --ttl 0
#或者通过以下命令重新创建加入指令
#kubeadm token create --print-join-command
[root@node ~]# kubeadm join 192.168.200.10:6443 --token jakivb.3ih0a5kectmd2djz \
--discovery-token-ca-cert-hash sha256:f1452f22b3e2c78a4ca8365de13c379c7189deeaf84ffb7a4f27650b9ecf824a
...省略
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
登录Master节点,检查各节点状态。
等所有的节点都已经Ready
,Kubernetes Cluster
创建成功,一切准备就绪。如果Pod
的状态为Pending
、ContainerCreating
、ImagePullBackOff
都表明Pod
没有就绪,Running
才是就绪状态。 如果有Pod
提示Init:ImagePullBackOff
,说明这个Pod
的镜像在对应节点上拉取失败,我们可以通过kubectl describe pod -n <命名空间>
查看 Pod 具体情况。Kubernetes K8S之kubectl命令详解及常用示例
[root@master ~]# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-8686dcc4fd-htr62 1/1 Running 0 16h 10.16.0.2 master <none> <none>
kube-system coredns-8686dcc4fd-mvsnd 1/1 Running 0 16h 10.16.0.3 master <none> <none>
kube-system etcd-master 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kube-apiserver-master 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kube-controller-manager-master 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kube-flannel-ds-amd64-plq67 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kube-flannel-ds-amd64-x9s7t 1/1 Running 0 16h 192.168.200.20 node <none> <none>
kube-system kube-proxy-d529t 1/1 Running 0 16h 192.168.200.20 node <none> <none>
kube-system kube-proxy-qfkv2 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kube-scheduler-master 1/1 Running 0 16h 192.168.200.10 master <none> <none>
kube-system kubernetes-dashboard-5f7b999d65-4d7qh 1/1 Running 0 16h 10.16.1.2 node <none> <none>
kube-system kuboard-84979d978d-sgp6j 1/1 Running 0 15h 10.16.1.3 node <none> <none>
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 4m48s v1.14.1
node Ready <none> 33s v1.14.1
2.6、安装Dashboard
将提供的kubernetes-dashboard.yaml
和dashboard-adminuser.yaml
文件上传至Master节点root目录,使用kubectl apply
命令安装Dashboard。
[root@master ~]# cp yaml/kubernetes-dashboard.yaml ./
[root@master ~]# cp yaml/dashboard-adminuser.yaml ./
[root@master ~]# kubectl apply -f kubernetes-dashboard.yaml
[root@master ~]# kubectl apply -f dashboard-adminuser.yaml
检查所有Pod状态。可以通过 kubectl 检查这个节点上各个系统 Pod 的状态,其中,kube-system
是 Kubernetes 项目预留的系统 Pod 的工作空间(Namepsace,注意它并不是 Linux Namespace,它只是 Kubernetes 划分不同工作空间的单位)
集群初始化如果遇到问题,可以使用kubeadm reset命令进行清理然后重新执行初始化。(Pending
状态,即调度失败。)
#这里Dashboard的容器启动需要
[root@master ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-8686dcc4fd-htr62 1/1 Running 0 3m22s 10.16.0.2 master <none> <none>
kube-system coredns-8686dcc4fd-mvsnd 1/1 Running 0 3m22s 10.16.0.3 master <none> <none>
kube-system etcd-master 1/1 Running 0 2m16s 192.168.200.10 master <none> <none>
kube-system kube-apiserver-master 1/1 Running 0 2m30s 192.168.200.10 master <none> <none>
kube-system kube-controller-manager-master 1/1 Running 0 2m32s 192.168.200.10 master <none> <none>
kube-system kube-flannel-ds-amd64-plq67 1/1 Running 0 119s 192.168.200.10 master <none> <none>
kube-system kube-flannel-ds-amd64-x9s7t 1/1 Running 0 49s 192.168.200.20 node <none> <none>
kube-system kube-proxy-d529t 1/1 Running 0 49s 192.168.200.20 node <none> <none>
kube-system kube-proxy-qfkv2 1/1 Running 0 3m22s 192.168.200.10 master <none> <none>
kube-system kube-scheduler-master 1/1 Running 0 2m40s 192.168.200.10 master <none> <none>
kube-system kubernetes-dashboard-5f7b999d65-4d7qh 1/1 Running 0 18s 10.16.1.2 node <none> <none>
通过命令检查到kubernetes-dashboard
被调度到Node节点运行,通过浏览器中输入Node节点地址(Master也可以访问)https://IP:30000(默认Dashboard只能集群内部访问,修改kubernetes-dashboard.yaml
文件中的Service为NodePort类型,并暴露端口到外部30000),即可访问Kubernetes Dashboard
,如下图所示:
登录Kubernetes Dashboard
需要输入令牌,通过以下命令获取访问令牌Dashboard
的认证令牌
[root@master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-admin-token | awk '{print$1}')
Name: kubernetes-dashboard-admin-token-n4rfs
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: kubernetes-dashboard-admin
kubernetes.io/service-account.uid: e9e73695-800d-11ee-a6c2-000c29f60dca
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi1uNHJmcyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU5ZTczNjk1LTgwMGQtMTFlZS1hNmMyLTAwMGMyOWY2MGRjYSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.SSKTSzH9AU8lSTfoToXy7s8WdwSAj0q2EDUnbbShwFCO0GORWyBd7HUIj8bGAjzvSaQ4cP3oP0oWLYXl0egcPu73SB21Lt_8gALYI2hADgzuKSgzH4rmObcmDxUpKp7TEI7pXYRHfbb4FUn2lcosy4tMN1zPWfrOfoF1dOT-pRl0E4gF6JlxPYrYNmPoUKs8O-DxYsZudV2GAfOeXXHAhOXUiOVl9G6sXI3-EB43xgLbno4Z2bbYF8aetatVoUZs8EQK1dfnPwvwBGnuz8QNcp-4w5qX3sqGFd1TMPq3U8LToxHRiPmLHouXNjHUELKwghwAyMB-sYydOecz8-jWlg
2.7、配置Kuboard
Kuboard是一款免费的Kubernetes图形化管理工具,其力图帮助用户快速在Kubernetes上落地微服务。登录Master节点,使用kuboard.yaml文件部署Kuboard。
[root@master ~]# cp yaml/kuboard.yaml ./
[root@master ~]# kubectl create -f kuboard.yaml
在浏览器输入地址http://192.168.200.10:31000,即可进入Kuboard的认证界面,在Token文本框中输入令牌(上述令牌)后可进入Kuboard控制台,如图所示: