Kubernetes v1.24 基於containerd部署

2022-07-20 18:01:27

  k8s每個節點安裝containerd。

  containerd安裝參考《containerd安裝博文》:https://www.cnblogs.com/punchlinux/p/16496094.html

containerd設定

  修改containerd的config.toml組態檔,修改k8s的映象初始化pause底層網路映象的下載地址

root@master:~# vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

  

  再一次重啟每個節點的containerd

systemctl restart containerd

  每個節點保持時間同步一致,安裝chrony。檢查時間一致性

chronyc sourcs -V
date

 

安裝kubeadm環境

  設定軟體倉庫

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

 

  更新軟體倉庫,並檢查源更新

apt-get update

  最新的版本則是1.24.3

 

  所有k8s節點都安裝kubeadm、kubeadm和kubectl

root@master:~# apt install  kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00

  檢視k8s初始化所需的映象

root@master:~# kubeadm config images list --kubernetes-version v1.24.3

 

  編寫一個shell指令碼,修改官方映象地址為阿里雲映象地址

        -n k8s.io則指定k8s 的namespace下載映象

root@master:~# vim imagedown.sh
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0

 

   所有k8s節點執行指令碼,下載映象

初始化k8s叢集

  每臺k8s節點設定載入模組,核心引數調優

root@master:~# vim /etc/modules-load.d/modules.conf
ip_vs
br_netfilter

root@master:~# modprobe ip_vs
root@master:~# modprobe br_netfilter

 

  核心優化

root@master:~# cat /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0

root@master:~# sysctl -p

 

  master執行初始化叢集

root@master:~# kubeadm init --apiserver-advertise-address=192.168.100.10 \
--apiserver-bind-port=6443  \
--kubernetes-version=v1.24.3  \
--pod-network-cidr=10.100.0.0/16 \
--service-cidr=10.200.0.0/16 \
--service-dns-domain=cluster.local \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--ignore-preflight-errors=swap

  選項解釋:

       --apiserver-advertise-address  api-server地址也就是master節點地址

       --apiserver-bind-port  api-server伺服器埠號

       --kubernetes-version  k8s版本號

       --pod-network-cidr  pod網路的地址建議16位元或者8位元地址

       --service-cidr  svc網路地址建議16位元或者8位元地址與pod網路區別開來

       --service-dns-domain=cluster.local  叢集dns域名地址,預設為cluster.local

       --image-repository  k8s映象下載地址

       --ignore-preflight-errors=swap  忽略初始化錯位,如果開啟了swap,可以忽略這個錯誤

 

  初始化完成

 kubectl憑據設定

  kubectl預設使用~/.kube/config檔案中憑據資訊管理kubernetes。

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

root@master:~# kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   19m   v1.24.3

  如果環境變數KUBECONFIG存在,則優先使用境變數KUBECONFIG設定的值。

root@master:~# mv .kube/config .
export KUBECONFIG=/root/config
root@master:~# kubectl get nodes

NAME  STATUS     ROLES            AGE    VERSION
master   NotReady   control-plane,master   102s     v1.24.3

  等網路設定完成後,STATUS狀態由NotReady變更為Ready

 

  還可以通過選項--kubeconfig=''明確指定憑據檔案位置。 

root@master:~# kubectl get nodes --kubeconfig /root/config

  

  kubernetes對憑據檔名沒有要求

root@master:~# mv config kube.conf
root@master:~# kubectl get nodes --kubeconfig kube.conf

  

設定網路

  這裡採用calico網路。

  官方地址:http://projectcalico.org 或者 https://www.tigera.io/project-calico/

  產品檔案:https://projectcalico.docs.tigera.io/about/about-calico

 

  calico專案下載地址:

  https://projectcalico.docs.tigera.io/getting-started/kubernetes/installation/config-options

 

  下載calico網路外掛yaml並修改pod網路地址,此地址為初始化叢集指定的pod網路地址段

root@master:~# curl https://projectcalico.docs.tigera.io/manifests/calico-etcd.yaml -O
root@master:~# vim calico-etcd.yaml

 

root@master:~# kubectl apply -f calico-etcd.yaml

  

   安裝calico後,立即建立pod,由於工作節點還未加入到叢集,所以calico網路還處於pending狀態

 

節點加入叢集

       如果master節點初始化叢集時終端輸出的加入叢集命令丟失,可以使用以下命令重新獲取:

root@master:~# kubeadm token create --print-join-command

  

  node節點執行加入叢集

 

  獲取節點狀態

  

  nerdctl 檢視k8s的namespace下執行的容器

root@master:~# nerdctl -n k8s.io container ls -a

  

  等待一段時間後,檢視pod執行狀態為running則部署完成

root@master:~# kubectl get pods -A -o wid

  

  檢視節點狀態

  

  驗證k8s正常提供服務:

         部署一個名為web的deployment並在宿主機可以存取:

root@master:~# kubectl create deployment web --image nginx:latest --replicas 2 --dry-run=client -o yaml > web.yaml

 

  修改一下映象拉去規則imagePullPolicy: IfNotPresent

root@master:~# cat web.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        imagePullPolicy: IfNotPresent

 

  建立deployment

root@master:~# kubectl apply -f web.yaml

 

  檢視pods

  建立service暴露容器埠

root@master:~# kubectl expose deployment web --target-port 80 --port 80 --type NodePort

  

  

  檢視service

root@master:~# kubectl get service

  

  宿主機依次存取每個節點的32316

         存取master:

    

  存取node01

  存取node02

其他k8s運維小技巧

kubectl命令補全

root@master:~# kubectl completion bash > /etc/bash_completion.d/kubectl
root@master:~# kubeadm completion bash > /etc/bash_completion.d/kubeadm
root@master:~# source /etc/bash_completion.d/kubectl
root@master:~# source /etc/bash_completion.d/kubeadm

   

kubectl edit 高亮顯示

[root@master ~]# vim .bashrc
[root@master ~]# export EDITOR=vim
[root@master ~]# source /root/.bashrc

 

以上就是關於Kubernetes v1.24版本的安裝。如果對你有幫助或有建議疑問可以評論區留言!