centos安裝k8s叢集

Mr.落葉發表於2022-03-01
  • 關閉swap,註釋swap分割槽
swapoff -a
  • 配置核心引數,將橋接的IPv4流量傳遞到iptables的鏈
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

docker

  • 安裝docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2

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

yum -y install docker-ce
  • 配置docker原始碼並設定cgroup
mkdir -p /etc/docker
[root@master01 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zdp3p97t.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

安裝k8s

  • 新增阿里kubernetes源
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
  • 安裝
yum install kubectl kubelet kubeadm

systemctl enable kubelet

 

初始化k8s叢集

  • --apiserver-advertise-address:這裡的ip地址就是要對外提供的ip地址,可以是內網ip也可以是公網ip,我這裡用的是公網ip
kubeadm init --kubernetes-version=1.23.4  \
--apiserver-advertise-address=【你的ip】   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

  • kubectl初始化設定,完成這一步之後就可以使用kubectl get pods、nodes了
mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 使kubectl可以自動補充
source <(kubectl completion bash)

這一步之後如果發現節點為NotReady狀態,是因為corednspod沒有啟動,缺少網路pod

 

 

  • 安裝calico網路,執行完之後node就會變成ready狀態
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

到這一步單機版k8s就已經安裝完成

 

k8s新增節點

  • 新增節點的前提是要在被新增的節點伺服器上重複上面的操作,安裝好k8s的基礎套件,安裝完成之後如果執行了kubeadm init,那麼需要在子節點重置一下
  • kubeadm reset 
  • 檢視master節點token
    • 在master節點上面檢視master節點的token值,用於在子節點上執行
kubeadm token create --print-join-command 

# 會輸出以下內容,以下內容就是master節點的token值
kubeadm join xx.xx.xx.xx:6443 --token i9vhtn.32fq9o8ka9iml1xm --discovery-token-ca-cert-hash sha256:5b0bc6f4915f5a6943b9e5fc12a901e9a2876abb43fb3a8e4c322fa7da4be4fc
  • 在子節點上執行以下命令,就是上一步token輸出的內容
kubeadm join xx.xx.xx.xx:6443 --token i9vhtn.32fq9o8ka9iml1xm --discovery-token-ca-cert-hash sha256:5b0bc6f4915f5a6943b9e5fc12a901e9a2876abb43fb3a8e4c322fa7da4be4fc
  • 接下來在master節點所在伺服器上執行 kubectl get nodes,就可以看到剛剛新增的節點了

 

 

 

 

 

問題點

  • kubectl top nodes會可能出現Metrics API not available,是因為沒有安裝metrics-server
    • 在叢集上安裝一下就可以了
  • 由於自己安裝的k8s,在主節點上部署pod的時候可能會有汙點的問題,可能會造成主節點的pod無法成功部署,具體錯誤類似於1 node(s) didn't satisfy existing pods anti-affinity rules, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerat
kubectl taint nodes [node-name] node-role.kubernetes.io/master:NoSchedule-

文章內容來源於網際網路,這裡自己踩坑做一個彙總歸納,並把自己遇到的問題分享出來供大家參考

參考文章:https://juejin.cn/post/7007734421981757448#diff2

https://www.kubernetes.org.cn/7189.html

相關文章