02 kubeadm部署k8s

文章目录

KubeAdmin安装k8s

1、集群类型

bash 复制代码
# kubernetes集群大体上分为两类: 一主多从和多主多从
# 1、一主多从:
一台 Master节点和多台Node节点,搭建简单,有单机故障分析,适合于测试环境
# 2、多主多从:
多台 Master节点和多台Node节点,搭建麻烦,安全性比较高,适合于生产环境

2、安装方式

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

bash 复制代码
# 方式一: kubeadm

Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

# 方式二:二进制包

从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

K8S API:

https://kubernetes.io/zh-cn/docs/reference/using-api/

一、准备环境

1、部署软件、系统要求

软件 版本
Centos CentOS Linux release 7.5及以上
Docker 19.03.12
Kubernetes V0.13.0
Flannel V1.19.1
Kernel-lm kernel-lt-4.4.245-1.el7.elrepo.x86_64.rpm
Kernel-lm-deve kernel-lt-devel-4.4.245-1.el7.elrepo.x86_64.rpm

2、节点规划

  • IP建议采用192网段,避免与kubernetes内网冲突
准备机器 IP 配置 系统内核版本
k8s-master1 192.168.15.111 2核2G 4.4+
k8s-node1 192.168.15.112 2核2G 4.4+
k8s-node2 192.168.15.113 2核2G 4.4+

二、kubeadm安装k8s

服务器配置至少是2G2核的。如果不是则可以在集群初始化后面增加 --ignore-preflight-errors=NumCPU

1、内核优化脚本(所有机器)

bash 复制代码
[root@k8s-m-01 ~]# cat base.sh  
#!/bin/bash

# 1、修改主机名和网卡
hostnamectl set-hostname $1 &&\
sed -i "s#111#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01] &&\
systemctl restart network &&\
# 2、关闭selinux和防火墙和ssh连接
setenforce 0 &&\
sed -i 's#enforcing#disabled#g' /etc/selinux/config &&\
systemctl disable --now firewalld &&\
# 如果iptables没有安装就不需要执行
# systemctl disable --now  iptables &&\
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config &&\
systemctl restart sshd &&\
# 3、关闭swap分区
# 一旦触发 swap,会导致系统性能急剧下降,所以一般情况下,K8S 要求关闭 swap
# cat /etc/fstab 
# 注释最后一行swap,如果没有安装swap就不需要
swapoff -a &&\
#忽略swap
echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet &&\ 

# 4、修改本机hosts文件
cat >>/etc/hosts <<EOF
192.168.15.111  k8s-m-01 m1
192.168.15.112  k8s-n-01 n1
192.168.15.113  k8s-n-02 n2
EOF

#  5、配置镜像源(国内源)
# 默认情况下,CentOS 使用的是官方 yum 源,所以一般情况下在国内使用是非常慢,所以我们可以替换成 国内的一些比较成熟的 yum 源,例如:清华大学镜像源,网易云镜像源等等
rm -rf /ect/yum.repos.d/* &&\
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &&\
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &&\
yum clean all &&\
yum makecache &&\
# 6、更新系统
#查看内核版本,若内核高于4.0,可不加--exclud选项
yum update -y --exclud=kernel* &&\
# 由于 Docker 运行需要较新的系统内核功能,例如 ipvs 等等,所以一般情况下,我们需要使用 4.0+以上版 本的系统内核要求是 4.18+,如果是 CentOS 8 则不需要内核系统更新
# 7、安装基础常用软件,是为了方便我们的日常使用
yum install wget expect vim net-tools ntp bash-completion ipvsadm ipset jq iptables conntrack sysstat libseccomp ntpdate -y &&\
# 8、更新系统内核
#如果是centos8则不需要升级内核
cd /opt/ &&\
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.137-1.el7.elrepo.x86_64.rpm &&\
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.137-1.el7.elrepo.x86_64.rpm &&\
# 如果内核低于4.0会有一些bug,导致生产环境中,如果流量很大的时候,会出现流量抖动现象
# 官网https://elrepo.org/linux/kernel/el7/x86_64/RPMS/

# 9、安装系统内容
yum linstall /opt/*.rpm -y &&\  
# 10、调到默认启动
grub2-set-default  0 && grub2-mkconfig -o /etc/grub2.cfg &&\
# 11、查看当前默认启动的内核 
grubby --default-kernel &&\
reboot
# 安装完成就是5.4内核

2、 免密脚本(所有机器)

bash 复制代码
# 1、免密
[root@k8s-master-01 ~]# ssh-keygen -t rsa
[root@k8s-master-01 ~]# for i in m1 n1 n2;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i;done
# 方式二:
root@openvpn ~]# ssh-keygen
[root@openvpn ~]# cat ssh-jump.sh  
#!/bin/bash
for i in 'm1''n1' 'n2'
do
expect -c "
spawn ssh-copy-id -i root@$i
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password\" {send \"123\r\";exp_continue}
}
"
done

# 在集群当中,时间是一个很重要的概念,一旦集群当中某台机器时间跟集群时间不一致,可能会导致集群面 临很多问题。所以,在部署集群之前,需要同步集群当中的所有机器的时间
方式一:时间同步ntpdate
# 2、时间同步写入定时任务 crontab -e
# 每隔5分钟刷新一次
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null
方式二:时间同步chrony
[root@k8s-m-01 ~]# yum -y install chrony
[root@k8s-m-01 ~]# systemctl enable --now chronyd
[root@k8s-m-01 ~]# date  #三台机器时间是否一样
Mon Aug  2 10:44:18 CST 2021

3、安装IPVS和内核优化(所有机器)

kubernetes中service有两种代理模式,一种是iptables,一种是ipvs

两者相比,ipvs性能高,但是如果使用,需要手动加载ipvs模块

bash 复制代码
# 1、安装 IPVS 、加载 IPVS 模块 (所有节点)
[root@k8s-m-01 ~]# yum install ipset ipvsadm  #如果没有下载这2个命令
ipvs 是系统内核中的一个模块,其网络转发性能很高。一般情况下,我们首选 ipvs
[root@k8s-n-01 ~]# vim /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 
# 2、授权(所有节点)
[root@k8s-n-01 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

# 3、内核参数优化(所有节点)
加载IPVS 模块、生效配置
内核参数优化的主要目的是使其更适合 kubernetes 的正常运行
[root@k8s-n-01 ~]# vim /etc/sysctl.d/k8s.conf
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.swappiness=0 
# 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.panic_on_oom=0 
# 开启 OOM
fs.inotify.max_user_watches=89100 
fs.file-max=52706963  开启 OOM
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
# 立即生效 
sysctl --system

4、安装Docker(所有机器)

bash 复制代码
[root@k8s-n-01 ~]# vim docker.sh 
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 &&\
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo &&\
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo &&\
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast &&\
sudo yum -y install docker-ce &&\
# Step 4: 开启Docker服务
systemctl enable --now docker.service &&\
#  Step 5: Docker加速优化服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://k7eoap03.mirror.aliyuncs.com"]
}
EOF

5、安装kubernetes(所有机器)

bash 复制代码
# 1、安装kubernetes(所有节点)

# 阿里源
[root@k8s-n-02 yum.repos.d]# 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
setenforce 0
yum install -y kubelet kubeadm kubectl 
# 版本是kubelet-1.21.3 此处指定版本下载为了与下边初始化节点版本对应
yum install kubectl-1.21.3 kubeadm-1.21.3 kubelet-1.21.3 -y  &&\
# 4、此时只需开机自启,无需启动,因为还未初始化
systemctl enable --now kubelet.service
# 5、查看版本
[root@k8s-m-01 ~]# kubectl version 
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3",

6、m01主节点初始化配置

1、查看kubernetes所需要的镜像
bash 复制代码
# 1、查看镜像列表
[root@k8s-m-01 ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.21.3
k8s.gcr.io/kube-controller-manager:v1.21.3
k8s.gcr.io/kube-scheduler:v1.21.3
k8s.gcr.io/kube-proxy:v1.21.3
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
quay.io/coreos/flannel:v0.14.0
2、部署m01主节点
bash 复制代码
# 1、初始化master节点
kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

# 过程中可监控初始化日志,出现successfully即为成功!
# tailf /var/log/messages
[root@k8s-master1 ~] cat /var/log/messages | grep successfully
# Mar 24 21:02:07 k8s-master1 containerd: time="2021-03-24T21:02:07.063840628+08:00" level=info msg="containerd successfully booted in 0.181480s"

# 2、 初始化完成查看kubernetes
[root@k8s-m-01 ~]# systemctl status kubelet.service

# 3、配置 kubernetes 用户信息
master节点执行
# 建立用户集群权限 
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 4、如果使用root用户,则添加至环境变量
# 临时生效
[root@k8s-m-01 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
# 永久生效
[root@k8s-m-01 ~]# cat /etc/profile.d/kubernetes.sh
 export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8s-m-01 ~]# source /etc/profile

# 5、增加命令提示(选做)
所有节点执行
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

7、kubernetes网络插件calico

bash 复制代码
kubernetes 需要使用第三方的网络插件来实现 kubernetes 的网络功能,这样一来,安装网络插件成为必要前提
第三方网络插件有多种,常用的有 flanneld、calico 和 cannel(flanneld+calico),不同的网络组件,都提供基本的网络功能,为各个 Node 节点提供 IP 网络等
1、安装集群网络插件(主节点)
bash 复制代码
# 下载calico.yaml #推荐
[root@pengfei-master1 ~]# wget https://docs.projectcalico.org/manifests/calico.yaml
[root@pengfei-master1 ~]# kubectl apply -f  calico.yaml
2、检查集群初始化状态
yaml 复制代码
# 方式一:
[root@k8s-m-01 ~]# kubectl get node  
NAME       STATUS   ROLES                  AGE   VERSION
k8s-m-01   Ready    control-plane,master   16m   v1.21.3
# 方式二:
[root@pengfei-master1 ~]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-74677b4c5f-8ql22   1/1     Running   0          3m42s
calico-node-46bld                          1/1     Running   0          3m42s
calico-node-bc9jh                          1/1     Running   0          3m42s
calico-node-npc7r                          1/1     Running   0          3m42s
coredns-7f8cbcb969-hwpgs                   1/1     Running   0          76m
coredns-7f8cbcb969-j2pn4                   1/1     Running   0          76m
etcd-pengfei-master1                       1/1     Running   0          76m
kube-apiserver-pengfei-master1             1/1     Running   0          76m
kube-controller-manager-pengfei-master1    1/1     Running   0          76m
kube-proxy-5v4ll                           1/1     Running   0          76m
kube-proxy-r9jds                           1/1     Running   0          69m
kube-proxy-s7kd6                           1/1     Running   1          70m
kube-scheduler-pengfei-master1             1/1     Running   0          76m          <none>
# READY状态为1/1即为成功!

8、将其他节点加入集群

bash 复制代码
# 1、主节点创建集群
node节点要查看token,主节点生成token可重复执行查看,不会改变
[root@k8s-m-01 ~]# kubeadm token create --print-join-command
kubeadm join 192.168.15.111:6443 --token m8g1q7.eqxte0aao5vgalim --discovery-token-ca-cert-hash sha256:8db2681f9c8f812e0d650f77abdc02f6277b5a45d93c4f9b81ebf424676001d0

# 2、从节点加入集群
[root@k8s-n-01 yum.repos.d]# kubeadm join 192.168.15.111:6443 --token m8g1q7.eqxte0aao5vgalim --discovery-token-ca-cert-hash sha256:8db2681f9c8f812e0d650f77abdc02f6277b5a45d93c4f9b81ebf424676001d0

[root@k8s-n-02 yum.repos.d]# kubeadm join 192.168.15.111:6443 --token m8g1q7.eqxte0aao5vgalim --discovery-token-ca-cert-hash sha256:8db2681f9c8f812e0d650f77abdc02f6277b5a45d93c4f9b81ebf424676001d0

#3、NDS测试
[root@k8s-m-01 ~]# kubectl run test -it --rm --image=busybox:1.28.3
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes #输入这条命令,成功后就是以下内容
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
/ #
#出现以上界面成功

node节点加入集群失败,状态为NotReady 解决方法

#node节点与master节点版本不一致
[root@k8s-m-01 ~]#  kubectl get node
NAME       STATUS     ROLES                  AGE      VERSION
k8s-m-01   Ready    control-plane,master     16m      v1.21.3
k8s-n-01   NotReady   <none>                 22m      v1.20.2
k8s-n-02   NotReady   <none>                 22m      v1.20.2

解决办法:
# 默认下载是最新版本,难免出现版本不一致的问题,所以下载时指定同一版本才行
# 1.从节点删除下载版本重新指定版本格式:
yum remove kubectl kubeadm kubelet -y
yum install kubectl-1.21.3 kubeadm-1.21.3 kubelet-1.21.3 -y

#2.设置开机自启
systemctl enable --now kubelet

#3.重置nonde节点配置(因为上述已经加入过集群,会报错证书,配置文件,端口号已存在,需要格式化子节点配置)
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[root@k8s-m-01 ~]#  kubectl reset  #报错以上内容执行此命令格式化子节点

#4.从集群移除状态为notready的node节点
[root@k8s-m-01 ~]#  kubectl delete node n2

#5.重新将node节点加入集群,此时需注意token值是否相同,如果多次生成token值,需确认最后生成的token值
注:此处做好在master节点重新生成一次token值用来node节点加入集群使用
[root@k8s-m-01 ~]#  kubeadm token create    --print-join-command 
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18
注:将生成结果在node节点执行

#6.将node节点重新加入集群
[root@k8s-m-01 ~]#  kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18
# 7、查看
[root@k8s-m-01 ~]#  kubectl get node
NAME       STATUS     ROLES                  AGE      VERSION
k8s-m-01   Ready    control-plane,master     16m      v1.21.3
k8s-n-01   Ready      <none>                 16m      v1.21.3
k8s-n-02   Ready      <none>                 16m      v1.21.3
# 所以节点都在ready状态,代表集群搭建成功

八、如果测试成功,无需执行以下命令

bash 复制代码
node节点加入集群失败,状态为NotReady 解决方法

# 1、加入集群报错解决
 1> 报错原因1
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

# 解决方法: echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

# 2、然后重新生成,再次测试,加入集群
[root@k8s-m-01 ~]#  kubeadm token create    --print-join-command 
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18
注:将生成结果在node节点执行

# 3、将node节点重新加入集群
[root@k8s-m-01 ~]#  kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18

2> 报错原因1
从节点加入集群可能会出现如下报错:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

PS:前提安装Docker+启动,再次尝试加入节点!
# 1、报错原因:
swap没关,一旦触发 swap,会导致系统性能急剧下降,所以一般情况下,所以K8S 要求关闭 swap
# 2、解决方法:
1>  执行以下三条命令后再次执行添加到集群命令:
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

2> 追加 --ignore-preflight-errors=Swap 参数重新执行即可!
[root@k8s-n-1 ~] kubeadm join 192.168.15.11:6443 --token iypm65.p5nmdzzw1zifxy6c --discovery-token-ca-cert-hash sha256:8bdbe324980e3350aaa3b9cea58edf576dc0a6d937da6b7bff6dbe6a01e0b525 --ignore-preflight-errors=Swap

3> 报错原因3
# 1、报错原因:
可能是内核参数忘记优化所有节点都需优化
# 2、解决方法:
回到上面第七小节,复制粘贴优化参数即可: cat > /etc/sysctl.d/k8s.conf <<EOF

4> 报错原因4
ode节点加入集群失败,状态为NotReady
情况1:软件版本不一致
[root@k8s-m-01 ~]#  kubectl get node
NAME       STATUS     ROLES                  AGE      VERSION
k8s-m-01   Ready    control-plane,master     16m      v1.21.2
k8s-n-01   NotReady   <none>                 22m      v1.20.2
k8s-n-02   NotReady   <none>                 22m      v1.20.2

# 1、原因分析:
默认下载是最新版本,难免出现版本不一致的问题,所以下载时指定同一版本才行
# 2、解决方法:
yum install kubectl-1.21.2 kubeadm-1.21.2 kubelet-1.21.2 -y	# 主从节点安装指定版本格式
kubectl reset	# 重新初始化
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18	# 重新将node节点加入集群

# PS:查看token值命令
[root@k8s-m-01 ~]# kubeadm token list
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18 
8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18

情况2:软件版本一致,touken值可能不对
[root@k8s-m-01 ~]#  kubectl get node
NAME       STATUS     ROLES                  AGE      VERSION
k8s-m-01   Ready    control-plane,master     16m      v1.21.3
k8s-n-01   NotReady   <none>                 22m      v1.20.2
k8s-n-02   NotReady   <none>                 22m      v1.20.2

# node节点为notready状态,加入从节点时报错:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
# 原因分析:因为多次生成主节点的token值,导致token值加入不一致或输入错误

# 解决方法:
# 从集群移除状态为notready的node节点
[root@k8s-m-01 ~]#  kubectl delete n2

# node节点重置touken值以及证书端口号等信息
[root@k8s-n-01 ~]#  kubeadm reset
[root@k8s-n-02 ~]#  kubeadm reset

# 主节点重新创建token
[root@k8s-m-01 ~]#  kubeadm token create    --print-join-command 
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18 

# 将node节点重新加入集群
kubeadm join 192.168.15.111:6443 --token fm0387.iqixomz5jmsukwsi     --discovery-token-ca-cert-hash sha256:d8ff83ffed5967000034d07b3da738ae4f1f0254e8417bb30c21f3ed15ac5d18

# 报错 3、STATUS 状态是Healthy
[root@k8s-m-01 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused   
etcd-0               Healthy     {"health":"true"}    
1、解决方式
[root@k8s-m-01 ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml 
 #- --port=0
[root@k8s-m-01 ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml 
 #- --port=0
 [root@k8s-m-01 ~]# systemctl restart kubelet.service

 2、查看状态
    [root@k8s-m-01 ~]# kubectl get cs
    Warning: v1 ComponentStatus is deprecated in v1.19+
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    scheduler            Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}  

九、 部署图形化页面kuborad

bash 复制代码
# 1、简介
Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图帮助用户快速在 Kubernetes 上落地微服务

# 2、安装
[root@k8s-master-01 ~]# kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
[root@k8s-master-01 ~]# kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml
复制代码
            STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}  


#### 九、 部署图形化页面kuborad

```bash
# 1、简介
Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图帮助用户快速在 Kubernetes 上落地微服务

# 2、安装
[root@k8s-master-01 ~]# kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
[root@k8s-master-01 ~]# kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml
相关推荐
armcsdn9 小时前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
铅笔侠_小龙虾11 小时前
Docker 实战 -- Mysql
mysql·docker·容器
阿里云云原生12 小时前
Higress MCP 服务管理,助力构建私有 MCP 市场
云原生
IvanCodes12 小时前
三、Docker常用命令
docker·容器
zzywxc78713 小时前
云原生 Serverless 架构下的智能弹性伸缩与成本优化实践
云原生·架构·serverless
海星船长丶14 小时前
基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
运维·docker·容器
KubeSphere 云原生14 小时前
Higress 上架 KubeSphere Marketplace,助力企业构建云原生流量入口
云原生
AKAMAI18 小时前
在Akamai平台上进行VOD转码的参考架构
后端·云原生·云计算