openEuler搭建k8s(1.28.2版本)

FuShudi發表於2024-11-09

目錄
  • k8s搭建(1.28.2版本)
    • 1. 安裝containerd
      • 1.1 下載tar包
      • 1.2 編寫服務單元檔案
    • 2. 安裝runc
    • 3. 安裝cni外掛
      • 3.1 下載檔案
      • 3.2 設定crictl執行端點
    • 4. 配置containerd
    • 5. 主機配置
      • 5.1 編輯hosts檔案(可選)
      • 5.2 開啟流量轉發
      • 5.3 關閉防火牆以及selinux
      • 5.4 關閉swap
    • 6. 搭建k8s
      • 6.1 配置yum源
      • 6.2 安裝工具
      • 6.3 初始化
    • 7. 網路外掛
      • 7.1 安裝calico
      • 7.2 配置映象加速器地址

k8s搭建(1.28.2版本)

不知道從什麼時候開始,openEuler已經開始支援使用containerd的k8s叢集了,之前我學習的時候最高都只能支援到1.23,所以這裡再來寫一篇關於部署執行時為containerd的叢集

為什麼要單獨寫關於openEuler的部署方式?

因為使用centos的部署方式在openEuler上部署的時候會有一些差異,而這些差異的地方就會導致無法繼續往下進行,所以我單獨寫一篇部落格來避開這些坑點

1. 安裝containerd

你可能想問,一個containerd有什麼不會安裝的,直接使用yum不就可以安裝好了嗎?是的,你在其他作業系統上確實可以這麼幹,但是在openEuler上這麼幹不會報錯,因為yum倉庫裡面確實有containerd的rpm包,你確實可以裝上,但是那個containerd版本太低。無法正常的使用。所以需要下載tar包來安裝

1.1 下載tar包

# 確保沒有使用官方倉庫的containerd
[root@master ~]# yum remove containerd -y
[root@master ~]# wget https://github.com/containerd/containerd/releases/download/v1.7.16/containerd-1.7.16-linux-amd64.tar.gz
[root@master ~]# tar -zxvf containerd-1.7.16-linux-amd64.tar.gz 
[root@master ~]# mv bin/* /usr/local/bin/

1.2 編寫服務單元檔案

[root@master ~]# vim /usr/lib/systemd/system/containerd.service

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

然後給containerd設計開機自啟

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl enable --now containerd

2. 安裝runc

這個也是一樣的,不能使用yum安裝的版本(至少面前不可以--文章寫於2024-11-9)

[root@master ~]# yum remove runc -y
[root@master ~]# wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
[root@master ~]# install -m 755 runc.amd64 /usr/local/sbin/runc

3. 安裝cni外掛

3.1 下載檔案

[root@master ~]# wget https://github.com/containernetworking/plugins/releases/download/v1.4.1/cni-plugins-linux-amd64-v1.4.1.tgz
[root@master ~]# mkdir -p /opt/cni/bin
[root@master ~]# tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.4.1.tgz

3.2 設定crictl執行端點

cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
EOF

4. 配置containerd

[root@master ~]# containerd config default > /etc/containerd/config.toml 
# 將cgroup開啟
[root@master ~]# vim /etc/containerd/config/toml
# 找到這一行配置,將false改為true
SystemdCgroup = true
# 修改sandbox映象地址
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

重啟containerd

[root@master ~]# systemctl restart containerd

5. 主機配置

5.1 編輯hosts檔案(可選)

將IP與主機名寫入到/etc/hosts檔案內,我這裡就不做了。不做沒有任何影響

5.2 開啟流量轉發

[root@master ~]# modprobe bridge
[root@master ~]# modprobe br_netfilter
[root@master ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@master ~]# sysctl -p

5.3 關閉防火牆以及selinux

[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
[root@master ~]# systemctl disable --now firewalld

5.4 關閉swap

如果配置了swap,請關閉他

[root@master ~]# swapoff -a

然後進入到/etc/fstab裡面註釋掉swap的那一行內容

6. 搭建k8s

到這裡就開始搭建k8s了

6.1 配置yum源

[root@master ~]#  cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

6.2 安裝工具

[root@master ~]# yum install kubectl kubeadm kubelet -y
[root@master ~]# systemctl enable kubelet

6.3 初始化

[root@master ~]#  kubeadm init --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
  • 這裡的kubernetes-version後面的值修改為你自己的kubeadm的版本
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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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.200.200:6443 --token alefrt.vuiz4k7424ljhh2i \
	--discovery-token-ca-cert-hash sha256:1c0943c98d9aeaba843bd683d60ab66a3b025d65726932fa19995f067d62d436 

看到這一段資訊就是初始化成功了,然後我們根據提示來建立目錄

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

,如果有其他節點需要加入叢集那麼就執行

[root@master ~]# kubeadm join 192.168.200.200:6443 --token alefrt.vuiz4k7424ljhh2i \
	--discovery-token-ca-cert-hash sha256:1c0943c98d9aeaba843bd683d60ab66a3b025d65726932fa19995f067d62d436 

然後我們可以檢視節點狀態

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   NotReady   control-plane   26s   v1.28.2

接下來我們安裝網路外掛calico,讓他的狀態變為Ready

7. 網路外掛

7.1 安裝calico

[root@master ~]#  wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
[root@master ~]# kubectl create -f tigera-operator.yaml

接下來我們來處理第二個檔案

[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
[root@master ~]# vim custom-resources.yaml 

# 將裡面的cidr改為初始化叢集使用的地址段
      cidr: 10.244.0.0/16

7.2 配置映象加速器地址

如果不配置映象加速器地址的話。映象是拉取不到的。

[root@master ~]# vim /etc/containerd/config.toml
# 需要找到這一行,並新增2行
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["映象加速器地址1","映象加速器地址2"]

可以百度搜一下哪些映象加速器地址還可以使用,然後替換掉裡面的文字

重啟containerd

[root@master ~]# systemctl restart containerd

然後等到他把所有的映象拉取完之後叢集就正常了

最終就是這樣的

[root@master ~]# kubectl get nodes 
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   15m   v1.28.2

相關文章