K8S 1.24.0安装步骤(踩坑无数的总结)

K8S 1.24.0安装步骤

前言

官方文档:https://kubernetes.io/zh-cn/docs/home
Kubernetes 1.24的发布日期从2022年4 月 19 日 移至 5 月 3 日,现已正式发布。此版本带来了 46 项增强。在这个版本中,最大的变动是从kubelet中移除dockershim,这是确保 Kubernetes 项目未来的必要步骤。从1.24开始,大家需要使用其他受到支持的运行时选项(例如containerd或CRI-O);如果您选择Docker Engine作为运行时,则需要使用cri-dockerd。

我的机器IP:
10.0.12.8 master
10.0.12.15 node1
10.0.12.9 node2

安装版本:
k8s 1.24.0
docker-ce 20.10.18 (当前最新版本)
cri-docker v0.2.5 (当前最新版本)
CentOS 7.6 腾讯云轻量应用服务器

第一步:基础设置

1、查看Linux系统版本
cat /etc/*-release
uname -r

2、关闭防火墙
systemctl disable firewalld #开机禁用
systemctl stop firewalld #停止

验证防火墙是否关闭成功
systemctl status firewalld

3、关闭Selinux
setenforce 0 && sed -i ‘s/enforcing/disabled/’ /etc/selinux/config #永久

验证Selinux是否关闭成功
getenforce 或者 sestatus

4、关闭swap
swapoff -a && sed -ri ‘s/.swap./#&/’ /etc/fstab

可通过 free -m查看swap的状态,swap的total值应为0

5、根据规划设置主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

6、在各台机中添加hosts
(坑1:hostname不能使用-和.以外的特殊字符)
cat > /etc/hosts << EOF
10.0.12.8 master
10.0.12.15 node1
10.0.12.9 node2
EOF
全部都配置好了以后,在三台服务ping一下,看看是否能访问通
ping master
ping node1
ping node2

7、使三台机的时间同步
yum install ntpdate -y
ntpdate time1.aliyun.com

设置定时任务,每小时同步一次
crontab -e
0 */1 * * * ntpdate time1.aliyun.com

8、升级操作系统内核
所有主机均需要操作(我在安装的时候,没有升级,也可正常部署。不过,为了稳妥起见,建议你还是升级。有时候出现一些比较令人费解的问题,会很难排查原因)

导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装elrepo YUM源仓库
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

安装kernael-ml版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo=“elrepo-kernel” -y install kernel-ml.x86_64

设置grub2默认引导为0
grub2-set-default 0

重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg

更新后,需要重启,使升级的内核生效
reboot

重启后,需要验证内核是否为更新对应的版本
uname -r

9、将桥接的IPV4流量传递到iptables的链
(在master和node机中都要执行)
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

10、加载br_netfilter模块
modprobe br_netfilter

查看是否加载
lsmod | grep br_netfilter

11、加载网桥过滤及内核转发配置文件
sysctl -p /etc/sysctl.d/k8s.conf

12、安装ipset及ipvsadm
所有主机均需要操作

安装ipset及ipvsadm
yum -y install ipset ipvsadm

配置ipvsadm模块加载方式
添加需要加载的模块
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
EOF

授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

第二步:安装docker

1、添加docker安装源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
或:sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装docker
yum -y install docker-ce

3、设置docker仓库
cat > /etc/docker/daemon.json << EOF
{
“registry-mirrors”: [“https://kqh8****.mirror.aliyuncs.com”],
“exec-opts”: [“native.cgroupdriver=systemd”]
}
EOF

4、启动docker
systemctl enable docker (允许开机启动)
sudo systemctl daemon-reload (重新加载daemon文件)
systemctl start docker

5、检验安装是否成功并启动
主要看docker服务器端是否启动
docker version #看完整信息
docker --version #看简要信息

可查看docker的仓库信息
docker info

第三步:cri-dockerd安装(k8s 1.24.0及以后的版本需要安装)

1、下载,安装
如不能下载,可手动下载上传
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.5/cri-dockerd-0.2.5-3.el7.x86_64.rpm
yum install cri-dockerd-0.2.5-3.el7.x86_64.rpm -y

2、配置修改
sed -i ‘s,^ExecStart.*,& --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7,’ /usr/lib/systemd/system/cri-docker.service

3、启动cri-dockerd
systemctl daemon-reload
systemctl enable --now cri-docker (允许开机启动,并即时启动)

4、查看两个服务的启动情况
systemctl status cri-docker.service
systemctl status cri-docker.socket

5、两个关键配置文件的路径
vi /var/run/cri-dockerd.sock
vi /usr/lib/systemd/system/cri-docker.socket
vi /usr/lib/systemd/system/cri-docker.service

第四步:安装kubeadm,kubelet和kubectl

1、添加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=0
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
EOF

2、安装kubeadm,kubelet和kubectl
(三台机都要装,版本根据自己的需要设置)
yum install -y kubelet-1.24.0 kubeadm-1.24.0 kubectl-1.24.0

3、配置kubelet
为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=“–cgroup-driver=systemd”

设置开机启动(这个时候不要启动kubelet,因为还没有配置文件,后续master初始化的时候,会启动)
systemctl enable kubelet

检查kubelet的状态是否正常
systemctl daemon-reload
systemctl status kubelet

Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命:

监视分配给该Node节点的pods
挂载pod所需要的volumes
下载pod的secret
通过docker/rkt来运行pod中的容器
周期的执行pod中为容器定义的liveness探针
上报pod的状态给系统的其他组件
上报Node的状态

第五步:集群镜像准备

第一种方式拉取镜像

1、拉取默认的配置
kubeadm config print init-defaults > init-config.yaml
打开该文件查看,修改镜像仓库:
将imageRepository: k8s.gcr.io 修改为 imageRepository: registry.aliyuncs.com/google_containers

2、根据第一步的配置文件,拉取镜像
kubeadm config images pull --config=init-config.yaml

第二种方式拉取镜像

1、查询需要的镜像和版本
kubeadm config images list --kubernetes-version=v1.24.0
结果用于2写脚本

2、写个脚本下载所有需要的镜像
在/home下保存文件vi down_images.sh
#!/bin/bash
images_list=’
registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.24.0
registry.aliyuncs.com/google_containers/pause:3.7
registry.aliyuncs.com/google_containers/etcd:3.5.3-0
registry.aliyuncs.com/google_containers/coredns:v1.8.6’
for i in $images_list
do
docker pull $i
done

设置文件权限
chmod 755 /home/down_images.sh
执行脚本
sh /home/down_images.sh
查看镜像下载情况
docker images

3、Master机需要2的所有镜像,工作节点只需要下面两个镜像
kube-proxy
pause

第六步:部署Kubernetes Master

1、执行核心的安装命令
(初始化,只在master机执行)

kubeadm init --kubernetes-version=1.24.0 --apiserver-advertise-address 10.0.12.8 --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 --cri-socket unix:///var/run/cri-dockerd.sock --v=5

–v=5 或 --v=10 是输出控制台信息的等级,便于排查错误。

–apiserver-advertise-address为master机的IP # --service-cidr 是svc的IP段 # --pod-network-cidr 是pod的IP段,IP地址后面的斜杠24表示掩码位是24位的,即用32位二进制表示的子网掩码中有连续的24个【1】,如【11111111 11111111 11111111 00000000】,将其转化为十进制,就是【255.255.255.0】 # Your Kubernetes control-plane has initialized successfully! 出现这句话,说明安装成功。

在这里插入图片描述

安装回滚
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock

2、执行1步命令提示的第一个动作
(只在master机执行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

3、重启所有master和node机器

第七步:安装网路插件Calico
只在master执行,还有另外一个插件Flannel,如有兴趣,可去了解一下。

1、安装证书
如没安装,下一步下载的时候,可能会报错。
yum install -y ca-certificates

2、安装operator
wget https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f tigera-operator.yaml

3、安装Calico
wget https://docs.projectcalico.org/manifests/custom-resources.yaml

修改文件custom-resources.yaml的第十三行:
cidr: 192.168.0.0/16 改为
cidr: 10.244.0.0/16 (这是kubeadm init时设置的–pod-network-cidr参数)
kubectl create -f custom-resources.yaml

4、查看,确保每个pod的STATUS都是Running(要等稍久点)
watch kubectl get pods -n calico-system

5、删除master上的taint
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
它应该返回以下内容
node/ untainted

6、查看节点
kubectl get nodes -o wide
它应该返回以下内容

7、恭喜!您现在拥有一个带有Calico的单主机Kubernetes集群
官方文档地址:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart
Calico没安装好,会带来很多网络问题

8、测试联通情况
kubectl get svc -n kube-system
dig -t a www.baidu.com @10.96.0.10 (这个IP是上一条命令查询出来的)

第八步:安装Node节点

1、在master机上执行下列命令
执行这个命令的目的是生成Node节点要执行的命令
kubeadm token create --ttl 0 --print-join-command

2、执行1步生成的命令
(在各个节点机上执行,注意要加上–cri-socket unix:///var/run/cri-dockerd.sock,1.24及后续版本,需要加这句)
kubeadm join 10.0.12.8:6443 --token axm8tx.vixq07jevv9axnwy --discovery-token-ca-cert-hash sha256:5b242dc60784737e180f37b125e946890089f687d0fb4795e0fcb8a70efb4eea --cri-socket unix:///var/run/cri-dockerd.sock

3、查询节点情况
kubectl get nodes -o wide

第九步:安装情况检查

1、查询节点情况
kubectl get nodes -o wide

2、查询组件情况
kubectl get cs

3、查询Pod情况
kubectl get pods --all-namespaces -o wide
kubectl get pods -A -o wide
kubectl get pods -n kube-system
kubectl get pods,svc,deploy -A -o wide

4、测试网络联通情况
kubectl get svc -n kube-system
dig -t a www.baidu.com @10.96.0.10

5、其它测试
查询命名空间

6、常用操作命令
查询版本
kubelet --version
kubectl version
kubeadm version

查看节点
kubectl get nodes -o wide
kubectl get all -n ingress-nginx 查看命名空间下的所有对象

删除pod
kubectl delete pods <pod_name> -n
kubectl delete svc <pod_name> -n
kubectl delete deploy <pod_name> -n
kubectl delete -f deploy.yaml(安装时的yaml)

编辑pod
kubectl edit pods <pod_name> -n
kubectl edit svc <pod_name> -n
kubectl edit deploy <pod_name> -n

查看状态,错误等信息
kubectl describe node -n

查看Ingress
kubectl get ingress -n

安装telnet
yum -y install telnet

第十步:问题案例分析

1、k8s master机组件状态发现scheduler unhealthy的处理

在这里插入图片描述

vi /etc/kubernetes/manifests/kube-scheduler.yaml配置文件,将–port=0改为 --port=10251

2、节点机查询pod报错
[root@k8s-node1 ~]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决方式:
cd /etc/kubernetes/
查看到有个文件:kubelet.conf(你们的有可能是admin.conf)

执行命令
echo “export KUBECONFIG=/etc/kubernetes/kubelet.conf” >> /etc/profile
source /etc/profile

再次查看kubectl get pod已经正常。
原因: kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。

第十一步:应用安装
1、kubernetes-dashboard V2.6.0安装
详见https://blog.csdn.net/u011654843/article/details/125327941

查看登录的Token
kubectl describe secrets dashboard-admin -n kube-system

2、如何快速编写yaml文件
第一种 使用kubectl create命令生产yaml文件
kubectl create deployment web --image=nginx -o yaml --dry-run > m1.yaml (测试生成yaml文件,然后修改成自己想要的。)

第二种 使用kubectl get 命令导出yaml文件
kubectl get deploy nginx -o=yaml >m2.yaml (导出已有的,然后修改成自己想要的)

3、常用软件安装
Tomcat,Nginx安装yaml脚本在附件中,直接执行如下命令安装
kubectl apply -f xxxx.yaml
kubectl delete -f xxxx.yaml
Yaml脚本可参照:https://www.kubebiz.com

简易安装可参照网页:https://blog.51cto.com/u_330478/4745839,基本命令有:
kubectl create deployment first-tomcat --image=tomcat:8.5.59 --namespace=studyns
kubectl expose deployment first-tomcat --namespace=studyns --port=8080 --type=NodePort
kubectl scale --replicas=2 deployment first-tomcat -n studyns(扩缩容)

Ingress安装要注意的问题
执行配置时,报如下图的错误:
在这里插入图片描述

解决方法:
kubectl get validatingwebhookconfigurations
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
参照网页:https://blog.csdn.net/qq_39218530/article/details/115372879

安装Ingress,可参照:(此文讲得比较清楚)
https://blog.csdn.net/yy8623977/article/details/124899742

注意大坑:
使用Ingress的应用,如tomcat、nginx等,与Ingress config要在一个namespace中,否则是无法访问的。注意使用kubectl describe命令查看:
在这里插入图片描述

在这里插入图片描述

进入POD:
kubectl -n studyns exec -it nginx-deployment-544dc8b7c4-z68jd – /bin/bash
进入POD后,查看文件内容用cat /etc/nginx/nginx.conf
在这里插入图片描述

联系作者:微信号 maxchina_zhang

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值