【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群
文章目录
- 【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群
- 前言
- 环境介绍
- 安装kubernetes集群
- 基础环境设置
- 安装Kubernetes集群
- 安装kubeadm,kubectl,kubelet
- kubeadm初始化集群(master节点操作)
- 安装网络插件flannel(master操作)
- Node节点加入集群
- 查看集群状态信息
 
- 重置集群
- 安装dashboard
 
 
前言
前面简单介绍了Kubernetes的相关架构及其组件,这一章节我们将介绍如何快速搭建Kubernetes的集群,这里我们将使用官方支持的用于部署 Kubernetes 的工具— kubeadm。
环境介绍
| 主机名 | ip地址 | 节点类型 | 系统版本 | 
|---|---|---|---|
| master.example.com | 192.168.194.128 | master,etcd | centos7.x | 
| node1.example.com | 192.168.194.130 | node1 | centos7.x | 
| node2.example.com | 192.168.194.131 | node2 | centos7.x | 
- 在所有节点上安装kubeadm,kubectl,kubelet。 
  - kubeadm: 安装kubernetes集群的安装工具,(安装master和node上的组件)
- kubectl: 客户端的命令行工具,
- kubelet: 每个node启动容器的工具。
 
 kubeadm 不能帮你安装或者管理
kubelet或kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
- 节点要求。 
  - 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
- 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
- CPU 2 核心及以上。
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
- 开启机器上的某些端口。请参见这里了解更多详细信息。
- 禁用交换分区。为了保证 kubelet 正常工作,必须禁用交换分区。 
    - 例如,sudo swapoff -a将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如/etc/fstab、systemd.swap等配置文件中禁用交换分区,具体取决于你的系统如何配置。
 
- 例如,
 
安装kubernetes集群
基础环境设置
- 所有节点时间同步
[root@master ~]#ntpdata ntp1.aliyun.com
## 如果没有ntpdate命令,则需要安装ntp
- 所有节点关闭防火墙
## 关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@master ~]#
- 所有节点关闭selinux
## 关闭selinux
[root@master ~]# getenforce
Enforcing
[root@master ~]#
[root@master ~]# setenforce 0
[root@master ~]# getenforce
Permissive
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
- 所有节点关闭swap
## 临时关闭
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         201        1050           9         567        1457
Swap:          2047           0        2047
[root@master ~]# swapoff -a
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         200        1051           9         567        1457
Swap:             0           0           0
[root@master ~]#
## 永久关闭挂载
[root@master ~]#sed -i '/swap/ s/^/#/' /etc/fstab
- 所有节点修改内核参数,开启ip_fword
[root@master ~]#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@master ~]#sysctl   -p
- 所有节点 加载内核模块(lvs的负载模块,用于kube-proxy负载均衡器)
[root@master ~]# cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
[root@master modules]# chmod 755 /etc/sysconfig/modules/ipvs.modules
[root@master modules]#
[root@master modules]# bash /etc/sysconfig/modules/ipvs.modules
[root@master modules]#  lsmod |grep "ip_vs|nf_conntrack"
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
[root@master modules]#
- 所有节点按照docker
Kubernetes在1.24版本之前,默认使用的是docker为pod中的容器,从v1.24版本之后将不在默认使用,因此仍想要使用docker,则必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目
默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。如果你不指定运行时,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的容器运行时。如果检测到有多个或者没有容器运行时,kubeadm 将抛出一个错误并要求你指定一个想要使用的运行时。
Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。 为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除。
docker安装见此文章:docker安装
安装Kubernetes集群
安装kubeadm,kubectl,kubelet
- 添加kubernetes的镜像源
cat <<EOF > /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
- 安装指定版本
[root@master ~]#yum list kubeadm --showduplicates |sort -r
[root@master ~]#yum list kubectl --showduplicates |sort -r
[root@master ~]#yum list kubelet --showduplicates |sort -r
[root@master ~]#yum install -y  kubeadm-1.23.9 kubectl-1.23.9  kublet-1.23.9
本章节以安装1.21.9版本为例
- 启动kubelet
[root@master ~]#systemctl enable kubelet && systemctl start kubelet
kubeadm初始化集群(master节点操作)
- 生成初始化集群的配置文件
[root@master ~]# sudo kubeadm config print init-defaults > kubeadm-config.yaml
- 修改kubedm-config.yml文件
[root@master ~]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.194.128
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: 192.168.194.128
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.21.9
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
[root@master ~]#
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDismZLb-1683185355141)(D:\学习\学习笔记\图片\95.png)]](https://img-blog.csdnimg.cn/d09ef7101bc443f5931e40ca91602cdd.png)
- advertiseAddress: 指定api server的地址
- name: 指定master的地址或者主机名但是必须能解析到
- imageRepository: 因为相关组件是以容器的方式进行部署的,这块时指定容器拉取镜像的镜像仓库(这里使用的是阿里的镜像仓库)
- kubernetesVersion: 指定安装的kubeam的版本(即与我们安装的kubeadm的版本保持一致)
- serviceSubnet: service服务的地址段;
- podSubnet: pod的地址段;
- 初始化集群
## 通过我们生成的配置文件进行初始化
[root@master ~]# kubeadm init --config kubeadm-config.yaml
可能出现的错误1:
- 该错误涉及到
bridge-nf-call-iptables内核参数的设置。这个内核参数是必须启用的,以确保 Kubernetes 网络功能的正常运行,echo “1” > /proc/sys/net/bridge/bridge-nf-call-iptables
- 初始化完成之后打印信息如下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfWhZx9s-1683185355144)(D:\学习\学习笔记\图片\97.png)]](https://img-blog.csdnimg.cn/9083f3711d184f03950c4e4ec4f55f40.png)
export KUBECONFIG=/etc/kubernetes/admin.conf这个命令是将 Kubernetes 集群的配置文件路径设置为环境变量KUBECONFIG的值。这个配置文件通常位于/etc/kubernetes/admin.conf,它包含了连接到 Kubernetes API Server 所需的证书、密钥和其他配置信息。通过设置KUBECONFIG环境变量,您可以让kubectl命令自动使用该配置文件进行身份验证和授权。当您运行kubectl命令时,它会自动加载KUBECONFIG环境变量中指定的配置文件。例如,如果您运行kubectl get pods命令,则kubectl会自动使用KUBECONFIG环境变量中指定的配置文件连接到 Kubernetes API Server 并获取 Pod 列表。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
这组命令用于将 Kubernetes 集群的配置文件复制到当前用户的
~/.kube目录,并将其所有权赋予当前用户,以便您可以使用kubectl命令与 Kubernetes 集群进行交互。具体来说,这组命令执行以下操作:
- 使用
mkdir -p $HOME/.kube命令创建一个名为.kube的目录,并将其放置在当前用户的主目录下。如果该目录已存在,则不会执行任何操作。- 使用
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config命令将 Kubernetes 集群的配置文件/etc/kubernetes/admin.conf复制到当前用户的~/.kube目录下,文件名为config。如果当前用户的~/.kube目录下已经存在一个名为config的文件,则会提示您是否要覆盖它。- 使用
sudo chown $(id -u):$(id -g) $HOME/.kube/config命令将config文件的所有权赋予当前用户。这可以确保您可以使用kubectl命令与 Kubernetes 集群进行交互,而不需要使用sudo命令。
kubeadm join 192.168.194.128:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e
- node节点加入kubenetes加入集群的命令
- 依次执行上述指令
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: overwrite ‘/root/.kube/config’?
[root@master ~]#
[root@master ~]#
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@master ~]#
- 查看集群节点信息
此时查看到的节点信息为NotReady,是因为网络插件还没有安装的原因
[root@master ~]# kubectl get nodes
NAME              STATUS   ROLES                  AGE   VERSION
192.168.194.128   NotReady    control-plane,master   13h   v1.21.9
[root@master ~]#
Kubernetes 中的节点状态可以分为以下几种:
Ready:表示节点已经准备好接受 Pod 调度,并且可以正常运行。如果节点状态为Ready,则 Kubernetes 将在该节点上运行 Pod。
NotReady:表示节点无法正常运行。这种状态可能是由于网络故障、资源不足或其他问题导致的。
Unknown:表示 Kubernetes 无法获取有关节点状态的信息。这种情况通常是由于与节点通信失败或节点组件故障导致的。
SchedulingDisabled:表示节点不接受新的 Pod 调度。这种状态通常是由于管理员手动禁用了节点或节点出现了问题导致的。
安装网络插件flannel(master操作)
- 使用pod的方式运行flannel
[root@master ~]wget https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
[root@master ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[root@master ~]#
- 查看集群信息
此时节点为Ready状态
[root@master ~]# kubectl get nodes
NAME              STATUS   ROLES                  AGE   VERSION
192.168.194.128   Ready    control-plane,master   13h   v1.21.9
[root@master ~]#
##flannel的pod启动正常
[root@master ~]# kubectl get pods -n kube-flannel
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-7zsqp   1/1     Running   0          30s
[root@master ~]#
- flannel网桥也存在
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVvbavpC-1683185355145)(D:\学习\学习笔记\图片\98.png)]](https://img-blog.csdnimg.cn/9cfff5d95b404fdd8c93d752f94897c0.png)
Node节点加入集群
- 方式一
## 该指令在初始化集群的时候会生成,
[root@master ~]#kubeadm join 192.168.194.128:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e
-  方式二 - 生成配置文件
 ## 生成加入集群的配置文件 [root@node1 ~]# kubeadm config print join-defaults > kube-join.yaml- 修改配置文件
 [root@node1 ~]# cat kube-join.yml apiVersion: kubeadm.k8s.io/v1beta2 caCertPath: /etc/kubernetes/pki/ca.crt discovery: bootstrapToken: apiServerEndpoint: 192.168.194.128:6443 token: abcdef.0123456789abcdef unsafeSkipCAVerification: true timeout: 5m0s tlsBootstrapToken: abcdef.0123456789abcdef kind: JoinConfiguration nodeRegistration: criSocket: /var/run/dockershim.sock name: 192.168.194.130 taints: null [root@node1 ~]#- apiServerEndpoint: 连接apiserver的地址,即master的api地址,这里可以改为192.168.194.128:6443,如果master集群部署的话,这里需要改为集群vip地址
- token及tlsBootstrapToken: 连接master使用的token,这里需要与master上的InitConfiguration(生成的kubeadm-config.yaml文件)中的token配置一致
- name: node节点的名称,如果使用主机名,需要确保master节点可以解析该主机名。否则的话可直接使用ip地址
 - 执行加入
 [root@node1 ~]# kubeadm join --config kube-join.yml
-  注意事项 - token会过期,当token过期之后需要手动生成token
 [root@master ~]# kubeadm token create muq6w3.fu4ztgk00pxet9k4- 查看tokne信息
 [root@master ~]# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GR OUPS abcdef.0123456789abcdef 22h 2023-05-05T09:18:48+08:00 authentication,signing <none> system:b ootstrappers:kubeadm:default-node-token muq6w3.fu4ztgk00pxet9k4 23h 2023-05-05T10:25:42+08:00 authentication,signing <none> system:b ootstrappers:kubeadm:default-node-token [root@master ~]#- 将token生成sha256字符串
 [root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e [root@master ~]#
查看集群状态信息
- 节点信息
[root@master ~]# kubectl get nodes
NAME                STATUS   ROLES                  AGE   VERSION
192.168.194.128     Ready    control-plane,master   81m   v1.21.9
192.168.194.130     Ready    <none>                 74m   v1.23.9
node2.example.com   Ready    <none>                 73m   v1.23.9
[root@master ~]#
我们在work node节点加入到集群后,可能会出现有的显示的是node的ip,有的显示的是node的域名,当想要将域名改为ip,则需要到对应的节点上修改kubelet的配置项。添加–hostname-override参数
[root@node2 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --hostname-override=192.168.194.131" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/sysconfig/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS [root@node2 ~]# [root@node2 ~]# systemctl restart kubelet.service [root@node2 ~]#
- namespace信息
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   82m
kube-flannel      Active   80m
kube-node-lease   Active   82m
kube-public       Active   82m
kube-system       Active   82m
[root@master ~]#
- pod信息
##  不知道-n(namespqce)的时候,默认为default的命名空间
[root@master ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-6f6b8cc4f6-72tvk                  1/1     Running   0          82m
coredns-6f6b8cc4f6-bw9rc                  1/1     Running   0          82m
etcd-192.168.194.128                      1/1     Running   2          82m
kube-apiserver-192.168.194.128            1/1     Running   2          82m
kube-controller-manager-192.168.194.128   1/1     Running   3          82m
kube-proxy-98qnw                          1/1     Running   0          76m
kube-proxy-n957q                          1/1     Running   0          82m
kube-proxy-tgstw                          1/1     Running   0          74m
kube-scheduler-192.168.194.128            1/1     Running   3          82m
[root@master ~]#
- 查看node详细信息
[root@master ~]# kubectl describe nodes 192.168.194.128
- 查看pod详细信息
[root@master ~]# kubectl describe pods kube-scheduler-192.168.194.128 -n kube-system
重置集群
- 删除节点
kubectl drain <node name> --delete-emptydir-data --force --ignore-daemonset
- 重置 kubeadm安装的状态
kubeadm reset
- 重置过程不会重置或清除 iptables 规则或 IPVS 表。如果你希望重置 iptables,则必须手动进行:
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
- 如果要重置 IPVS 表,则必须运行以下命令:
ipvsadm -C
- 删除节点:
kubectl delete node <节点名称>
安装dashboard
- 下载dashboard的yaml文件
[root@master ~]#wget \ https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
- 修改recommended.yaml文件
默认这个部署文件当中,会单独创建一个名为kubernetes-dashboard的命名空间,并将kubernetes-dashboard部署在该命名空间下。dashboard的镜像来自docker hub官方,所以可不用修改镜像地址,直接从官方获取即可。
但是在默认情况下,dashboard并不对外开放访问端口,因此需要使用nodePort的方式将其端口暴露出来,主要修改如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vO4nc810-1683185355146)(D:\学习\学习笔记\图片\99.png)]](https://img-blog.csdnimg.cn/4a6e31d08d3649bda2efd391ab0f00c3.png)
- 执行安装
[root@master ~]#kubectl apply  -f recommended.yaml
- 查看安装情况
[root@master ~]# kubectl get namespaces
NAME                   STATUS   AGE
default                Active   5h1m
kube-flannel           Active   4h59m
kube-node-lease        Active   5h1m
kube-public            Active   5h1m
kube-system            Active   5h1m
kubernetes-dashboard   Active   3h24m
[root@master ~]#
[root@master ~]# kubectl get pod -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7c857855d9-8xjsj   1/1     Running   1          3h24m
kubernetes-dashboard-658b66597c-q65fh        1/1     Running   0          65m
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl get service -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.109.143.189   <none>        8000/TCP        3h25m
kubernetes-dashboard        NodePort    10.101.172.188   <none>        443:30725/TCP   3h25m
[root@master ~]#
此时kubernetes-dashboard已经监听到宿主机的30725端口
- 访问kubernetes-dashboard
通过宿主机ip+端口的形式访问:https://192.168.194.128:30725
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLoLcxBO-1683185355147)(D:\学习\学习笔记\图片\100.png)]](https://img-blog.csdnimg.cn/aebae8df2ae74d9e9f6c21e00f346f55.png)
登录方式:
- 选择kubeconfig时:将.kube/config的文件拷贝出来,在上传上去即可;
- 用token的方式我们可以通过如下指令获取token:
[root@master ~]# kubectl describe secrets -n kubernetes-dashboard $(kubectl get secrets -n kubernetes-dashboard |grep kubernetes-dashboard-token |awk '{print $1}') |grep token
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KD60HZdP-1683185355148)(D:\学习\学习笔记\图片\101.png)]](https://img-blog.csdnimg.cn/4c4571d568c942a881a671dc9b6bf159.png)
- 通过该token登入集群以后,发现很多namespace包括一些其他的资源都没有足够的权限查看。这是因为默认我们使用的这个帐户只有有限的权限。我们可以通过对该sa授予cluster-admin权限来解决这个问题。
- 再次修改recommended.yaml文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5bMSpRi-1683185355149)(D:\学习\学习笔记\图片\102.png)]](https://img-blog.csdnimg.cn/6b7bb2b5154e45bd9d6bc4ba309dd8cc.png)
- 删除并重新创建
[root@master ~]# kubectl delete -f recommended.yaml
namespace "kubernetes-dashboard" deleted
serviceaccount "kubernetes-dashboard" deleted
service "kubernetes-dashboard" deleted
secret "kubernetes-dashboard-certs" deleted
secret "kubernetes-dashboard-csrf" deleted
secret "kubernetes-dashboard-key-holder" deleted
configmap "kubernetes-dashboard-settings" deleted
role.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
clusterrole.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
clusterrolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
deployment.apps "kubernetes-dashboard" deleted
service "dashboard-metrics-scraper" deleted
deployment.apps "dashboard-metrics-scraper" deleted
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
[root@master ~]#
[root@master ~]#
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TnvLOBa-1683185355150)(D:\学习\学习笔记\图片\103.png)]](https://img-blog.csdnimg.cn/f37fccf60dc946afb7d1367802931e36.png)
至此kubernetes集群已经安装完毕,但是在实际生产中我们需要保证matser节点高可用,甚至使用外部的etcd高可用,后续我们将详细说明。
er created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
[root@master ~]#
[root@master ~]#
至此kubernetes集群已经安装完毕,但是在实际生产中我们需要保证matser节点高可用,甚至使用外部的etcd高可用,后续我们将详细说明。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2x67EvGB-1683185355142)(D:\学习\学习笔记\图片\96.png)]](https://img-blog.csdnimg.cn/d3bc547411cd47c7beea12ba4ee76dbf.png)



















