小明說:我只想搭建一個集群匠璧,網上搜出一大堆原理內容,還分了好幾篇看的我眼花繚亂咸这。波波help
波波說:好夷恍,沒關系。今天咱們一起來搭一個集群媳维。廢話不多說開干裁厅!
環(huán)境要求
每臺機器 2 GB 或更多的 RAM 2 CPU 核或更多
準備工作
? ? ?內核確認
uname -a
Linux k8s-node2 5.4.0-96-generic #109-Ubuntu SMP Wed Jan 12 16:49:16 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
? ? ? 設定IP
cd /etc/netplan/
sudo mv 00-installer-config.yaml 00-installer-config.yaml.disabled
vi 99-installer-config.yaml
network:
? version: 2
? ethernets:
? ? ens33:
? ? ? dhcp4: no
? ? ? addresses: [192.168.88.100/24]
? ? ? gateway4: 192.168.88.2
? ? ? nameservers:
? ? ? ? ? addresses: [192.168.88.2]
? ? ? ? ? search: []
? ? ? optional: true
netplan apply
我準備了三臺機器
master:192.168.88.100
node1:192.168.88.101
node2:192.168.88.102
? ? ? ?關閉swap
vi? /etc/fstab 注釋掉最后一行
swapoff -a && swapon -a
free -m 查看
kubeadm安裝集群
模塊配置
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
sudo apt-get install -y apt-transport-https ca-certificates curl
安裝containerd
apt-get install containerd
容器運行時
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables? = 1
net.ipv4.ip_forward? ? ? ? ? ? ? ? = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
配置crictl?
VERSION="v1.23.0"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz
vi /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
安裝kubeadm
更新?apt?包索引并安裝使用 Kubernetes?apt?倉庫所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
下載 Google Cloud 公開簽名秘鑰:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
添加 Kubernetes?apt?倉庫:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新?apt?包索引冰沙,安裝 kubelet、kubeadm 和 kubectl执虹,并鎖定其版本:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
注意:以上master與node都要安裝
安裝 kubeadm
kubeadm init --apiserver-advertise-address=192.168.88.100 \
? ? ? ? ? ? --service-cidr=10.1.0.0/16 \
? ? ? ? ? ? --pod-network-cidr=192.168.0.0/16
--apiserver-advertise-address?可用于為控制平面節(jié)點的 API server 設置廣播地址拓挥。
--control-plane-endpoint?可用于為所有控制平面節(jié)點設置共享端點。
--control-plane-endpoint?允許 IP 地址和可以映射到 IP 地址的 DNS 名稱袋励。 (calico默認是192.168.0.0)
安裝完后按照說明執(zhí)行
? mkdir -p $HOME/.kube
? sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
? sudo chown $(id -u):$(id -g) $HOME/.kube/config
有幾個node就你的節(jié)點中粘貼執(zhí)行即可
kubeadm join 192.168.88.100:6443 --token osgyk1.ewoygvudbb84xk3l \
? ? ? ? --discovery-token-ca-cert-hash sha256:4c17899291da6c9888c1f5f02454bcf471a4a3ae214dbe85f2178953456665c1
這個比較關節(jié)
export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
source ~/.bash_profile
順利完成
常見問題
1侥啤,kubeadm安裝不成功 查看日志,有可能是API server 設置廣播地址寫錯了
2茬故,kubeadm join的命令不小心丟了怎么辦盖灸?
? ? ? kubeadm token create --print-join-command重新生成一下。
3磺芭,搞砸了怎么辦赁炎?
給你四個我的寶貝,然后重新安裝钾腺。
kubeadm reset
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube/config
rm -rf /etc/kubernetes/
小明你學會了嗎徙垫?
總結:其實最好的教程就是官網的幫助文檔。K8s安裝的東西稍多了一些放棒,我只是梳理了一下姻报。便于小伙伴們理解。
參考: