ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于kubeadm 部署K8S1.22.3 踩坑

2021-11-12 16:03:12  阅读:402  来源: 互联网

标签:K8S1.22 kubernetes 部署 -- yum kubeadm kube docker


服务器节点:

k8s-master01192.168.1.50
k8s-node01192.168.1.51
k8s-node02192.168.1.52

一、安装docker,所有服务器都需要安装

安装Docker的依赖库。

yum install -y yum-utils device-mapper-persistent-data lvm2

添加阿里云Docker CE的软件源信息。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker CE。

yum makecache fast yum -y install docker-ce

启动Docker服务。

systemctl start docker

 设置开机自动启动

systemctl enable docker

二、使用kubeadm引导部署k8s

参考链接:使用 kubeadm 引导集群 | Kubernetes

服务器初始配置(所有服务器同样操作)

#关闭防火墙,selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

#设置主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

#在master添加hosts
cat >> /etc/hosts << EOF
192.168.1.50 k8s-master01
192.168.1.51 k8s-node01
192.168.1.52 k8s-node02
EOF

#启用IPv4模块
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

配置国内阿里云k8s源
# 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

安装 kubeadm、kubelet 和 kubectl

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

  • kubectl:用来与集群通信的命令行工具。

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, 官方推荐使用 systemd 驱动,不推荐 cgroupfs 驱动,因此需要修改kubelet或者docker的 cgroup driver,否则会因两者cgroup driver不一致出现以下错误:

Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""

官方参考链接:配置 cgroup 驱动 | Kubernetes

方法1、修改docker的Cgroup Driver
修改/etc/docker/daemon.json文件,没有就创建一个

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker服务

systemctl daemon-reload
systemctl restart docker

在master节点使用kubeadm进行初始化

由于默认拉取镜像地址k8s.gcr.io国内无法访问,修改指定阿里云镜像仓库地址

kubeadm init --apiserver-advertise-address=192.168.1.50 \
 --apiserver-bind-port=6443 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--image-repository registry.aliyuncs.com/google_containers

初始化完成后,会显示添加节点命令

Your Kubernetes control-plane has initialized successfully!
​
To start using your cluster, you need to run the following as a regular user:
​
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
​
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
​
Then you can join any number of worker nodes by running the following on each as root:
​
kubeadm join 192.168.1.50:6443 --token 93erio.hbn2ti6z50he0lqs \
    --discovery-token-ca-cert-hash sha256:3bc60f06a19bd09f38f3e05e5cff4299011b7110ca3281796668f4edb29a56d9  #需要记住
​

master节点上执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在node01和node02分别执行

kubeadm join 192.168.90.110:6443 --token 0o6bsj.upbk5c0v6vlytltk \
    --discovery-token-ca-cert-hash sha256:7be9e4de61b64a38b4a3579b6f5eefbcd7b32c703a788a8d4d2ffc73a3bc53c

如出现节点无法添加并报以下错误时

error execution phase preflight: couldn't validate the identity of the API Server: invalid discovery token CA certificate hash: invalid hash "sha256:7be9e4de61b64a38b4a3579b6f5eefbcd7b32c703a788a8d4d2ffc73a3bc53c", expected a 32 byte SHA-256 hash, found 31 bytes

1、kubernetse-master重新生成token:
#kubeadm token create   
1p40ao.o433wcrxg6lnaa05

2、查看值
#openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
8be9e4de61b64a38b4a3579b6f5eefbcd7b32c703a788a8d4d2ffc73a3bc53c8

3、在node节点中执行此命令 join就成功了
#kubeadm join 192.168.1.50:6443 –token 1p40ao.o433wcrxg6lnaa05 \ --discovery-token-ca-cert-hash sha256:8be9e4de61b64a38b4a3579b6f5eefbcd7b32c703a788a8d4d2ffc73a3bc53c8

添加完成后,查看节点状态是NotReady,这是因为网络节点还未安装。

[root@master01 manifests]# kubectl get nodes
NAME       STATUS     ROLES                  AGE    VERSION
master01   NotReady   control-plane,master   162m   v1.22.3
node01     NotReady   <none>                 63m    v1.22.3
node02     NotReady   <none>                 63m    v1.22.3

检查组件状态:

[root@master01 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   
controller-manager   Healthy   ok   

检测状态时由于/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0,因此可能导致以下错误:

Unhealthy  Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused 

解决方式是注释掉对应的port即可,进入/etc/kubernetes/manifests/目录进行一下操作:

kube-controller-manager.yaml文件修改:注释掉27行 #- --port=0

kube-scheduler.yaml配置修改:注释掉19行 #- --port=0

查看各节点状态:

由于当前未安装网络组件,各节点状态是notready

[root@master01 ~]# kubectl get nodes
NAME       STATUS     ROLES                  AGE   VERSION
master01   NotReady   control-plane,master   23h   v1.22.3
node01     NotReady   <none>                 22h   v1.22.3
node02     NotReady   <none>                 22h   v1.22.3

下面进行网络组件配置参考链接:添加 Windows 节点 | Kubernetes

首先下载并配置 Linux 版本的 Flannel,下载最新的 Flannel 清单文件:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

部署pod

kubectl apply -f kube-system.yml

查看pod是否都正常运行

kubectl get pods -n kube-system

如果pod状态存在异常,

使用kubectl logs 当前异常pod命 -n kube-system 进行日志查看

完成k8s部署后,部署kuboard界面化管理工具

kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml

参考链接:在 K8S 中安装 Kuboard v3 | Kuboard

标签:K8S1.22,kubernetes,部署,--,yum,kubeadm,kube,docker
来源: https://blog.csdn.net/ice_bird/article/details/121246267

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有