当前位置:   article > 正文

使用kubeadm部署kubernetes 1.24.3_kubectl apply -f 安装cni

kubectl apply -f 安装cni

 节点信息:

  1. 172.31.7.101   master1     控制节点
  2. 172.31.7.102     node1     工作节点
  3. 172.31.7.103     node2     工作节点

 这里使用containerd作为运行时,部署可参照

https://blog.csdn.net/weixin_46476452/article/details/127670046

目录

一、系统环境初始化

二、配置apt源、下载kubeadm

三、安装cni

四、初始化kubernetes

五、配置节点认证,加入集群

六、部署calico网络插件

七、验证

八、报错处理


一、系统环境初始化

  1. 1、关闭swap
  2. # swapoff -a
  3. # sed -i 's@/swap@#/swap@' /etc/fstab
  4. 2、时钟同步
  5. 如果没有时钟服务下载一个
  6. # apt install chrony
  7. # systemctl status chronyd
  8. # # systemctl status chronyd
  9. 3、配置内核参数
  10. (1)、加载模块
  11. # modprobe br_netfilter
  12. (2)、添加内核参数
  13. # echo -e "net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-iptables = 1 " >> /etc/sysctl.conf
  14. (3)、配置生效
  15. # sysctl -p
  16. net.ipv4.ip_forward = 1
  17. net.bridge.bridge-nf-call-iptables = 1

 我系统防火墙本身就已经关闭,因此未列出,请知悉

二、配置apt源、下载kubeadm

  1. 1、安装https包传输工具apt-transport-https,支持https的apt源
  2. # apt-get update && apt-get install -y apt-transport-https
  3. 2、把key导入,用于校验包的完整性
  4. # curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
  5. 3、此时还没用添加仓库源,因此没有kubeadm
  6. # apt-cache madison kubeadm
  7. N: Unable to locate package kubeadm
  8. 3、添加kubeadm镜像阿里云的仓库源
  9. # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
  10. > deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
  11. > EOF
  12. 4、更新仓库
  13. # apt-get update

 可以看见很多版本的kubeadm包,都是阿里云镜像仓库提供的,版本号要与k8s版本号保持一致

  下载 1.24.3版本

# apt-get install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00

 

三、安装cni

cni 是 K8s 中标准调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel

Releases · containernetworking/plugins · GitHub

  1. 1、下载cni
  2. # wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
  3. 2、cni解压(提前创建/opt/cni/bin/目录)
  4. # tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

 四、初始化kubernetes

1、下载镜像(提前下载,初始化集群的时候可节省时间)

      1.1、列出我们初始化v1.24.3版本kubernetes,所需要的镜像

 这些镜像默认是使用Google官方镜像仓库,无法直接访问,我们可以从国内的阿里镜像仓库下载

     1.2、编写脚本,执行脚本下载镜像

  1. root@master1:/usr/local/src# cat images-down.sh
  2. #!/bin/bash
  3. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
  4. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
  5. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
  6. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
  7. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
  8. nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0

      1.3、下载完毕

   2、修改配置文件

  1. # vim /etc/containerd/config.toml
  2. 61 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
  3. 127 SystemdCgroup = true
  4. 将61行Google镜像替换成阿里云的镜像
  5. 将127行值改为true

 在K8S中创建容器时默认使用google官方镜像仓库的镜像k8s.gcr.io/pause:3.7 ,需要修改为国内的镜像 (3.7版本是根据上面#kubeadm config images list --kubernetes-version v1.24.3 列出的),该镜像是封装POD底层网络的,实现一个POD内多个容器公用同一个网络

   3、kubeadm初始化:

  1. root@master1:~# kubeadm init --apiserver-advertise-address=172.31.7.101 \
  2. > --apiserver-bind-port=6443 \
  3. > --kubernetes-version=v1.24.3 \
  4. > --pod-network-cidr=10.100.0.0/16 \
  5. > --service-cidr=10.200.0.0/16 \
  6. > --service-dns-domain=cluster.local \
  7. > --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  8. > --ignore-preflight-errors=swap

命令注解:

--apiserver-advertise-address=172.31.7.101(监听地址就是当前本机ip地址)

--apiserver-bind-port=6443 (apiserver监听端口默认就是6443)

--kubernetes-version=v1.24.3 (当前K8S实际版本号)

--pod-network-cidr=10.100.0.0/16  (pod网络)
--service-cidr=10.200.0.0/16   (service网络,和pod网络不能一样)

--service-dns-domain=cluster.local  (service域名后缀,默认是cluster.local)
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers (把镜像仓库指向阿里云的仓库)
--ignore-preflight-errors=swap   (忽略因开启swap而报错)

 初始化成功

上面的回显包括两四部分信息

第一:表示初始化成功

第二:表示某个节点想要使用集群需要配置认证文件,具体命令以给出

第三:需要安装网络插件flannel或者calico,并且给出了下载地址

第四: 添加worker节点需要执行的指令

五、配置节点认证,加入集群

刚初始化完成后是无法使用kubectl get查看到资源信息的,因为节点上的api service默认会连接本机的8080端口而不是api service默认的6443端口,因此各节点都需要config文件来获取这些信息

  1. 查看config配置文件的信息
  2. root@master1:~# kubectl config view
  3. apiVersion: v1
  4. clusters:
  5. - cluster:
  6. certificate-authority-data: DATA+OMITTED
  7. server: https://172.31.7.101:6443
  8. 指定了连接172.31.7.101:6443
  9. DATA+OMITTED并且使用了证书做认证,因此每个节点都需要有这个文件才能连接到api service

 kubectl默认使用$HOME/.kube/config文件,向集群提供认证信息的

  1. master1:~# mkdir -p $HOME/.kube
  2. master1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. master1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

将 $HOME/.kube/config文件拷贝到两个node节点上,否则会有认证问题服务正常执行kubectl

  1. root@node1:~# mkdir /root/.kube/
  2. root@node2:~# mkdir /root/.kube/
  3. root@master1:~# scp /root/.kube/config node1:/root/.kube/
  4. root@master1:~# scp /root/.kube/config node2:/root/.kube/

 依次加入worker节点

  1. root@node1:~# kubeadm join 172.31.7.101:6443 --token qwqjvh.0pg5kl4crvetbjce \
  2. > --discovery-token-ca-cert-hash sha256:f02108644fd8bb51862765f604ee5dc59630e66d535b25191bf32644df835871

六、部署calico网络插件

calico.yaml官网路径如下截图

Customize Calico configuration

1、下载calico.yaml

curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.4/manifests/calico.yaml -O

2、修改calico.yaml

它默认的是192.168.0.0/16 把这个地址修改成我们初始化时给定的pod地址

3、启动calico网络插件

# kubectl apply -f calico.yaml 

七、验证

1、查看节点状态,都已ready

2、查看pod状态

3、服务测试

  1. root@master1:~# cat nginx.yaml
  2. kind: Deployment
  3. #apiVersion: extensions/v1beta1
  4. apiVersion: apps/v1
  5. metadata:
  6. labels:
  7. app: myserver-nginx-deployment-label
  8. name: myserver-nginx-deployment
  9. namespace: myserver
  10. spec:
  11. replicas: 1
  12. selector:
  13. matchLabels:
  14. app: myserver-nginx-selector
  15. template:
  16. metadata:
  17. labels:
  18. app: myserver-nginx-selector
  19. spec:
  20. containers:
  21. - name: myserver-nginx-container
  22. image: nginx
  23. #command: ["/apps/tomcat/bin/run_tomcat.sh"]
  24. #imagePullPolicy: IfNotPresent
  25. imagePullPolicy: Always
  26. ports:
  27. - containerPort: 80
  28. protocol: TCP
  29. name: http
  30. - containerPort: 443
  31. protocol: TCP
  32. name: https
  33. env:
  34. - name: "password"
  35. value: "123"
  36. - name: "age"
  37. value: "18"
  38. ---
  39. kind: Service
  40. apiVersion: v1
  41. metadata:
  42. labels:
  43. app: myserver-nginx-service-label
  44. name: myserver-nginx-service
  45. namespace: myserver
  46. spec:
  47. type: NodePort
  48. ports:
  49. - name: http
  50. port: 80
  51. protocol: TCP
  52. targetPort: 80
  53. nodePort: 30004
  54. - name: https
  55. port: 443
  56. protocol: TCP
  57. targetPort: 443
  58. nodePort: 30443
  59. selector:
  60. app: myserver-nginx-selector

 创建nginx.yaml资源

  1. root@master1:~# kubectl create ns myserver
  2. namespace/myserver created
  3. root@master1:~# kubectl apply -f nginx.yaml
  4. deployment.apps/myserver-nginx-deployment created
  5. service/myserver-nginx-service created

 访问任意节点的30004端口

 八、报错处理

          第一次初始化不成功,看了下containerd服务状态有pause字段告警

 恢复到初始化前状态

  1. 还原初始化之前状态
  2. # kubeadm reset
  3. # systemctl restart containerd.service

 查看配置文件发现镜像路径少一个符号,导致拉不到镜像,修改后再进行初始化就OK了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/477684
推荐阅读
相关标签
  

闽ICP备14008679号