小明说:我只想搭建一个集群,网上搜出一大堆原理内容,还分了好几篇看的我眼花缭乱。波波help
波波说:好,没关系。今天咱们一起来搭一个集群。废话不多说开干!
环境要求
每台机器 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 可用于为控制平面节点的 API server 设置广播地址。
--control-plane-endpoint 可用于为所有控制平面节点设置共享端点。
--control-plane-endpoint 允许 IP 地址和可以映射到 IP 地址的 DNS 名称。 (calico默认是192.168.0.0)
安装完后按照说明执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
有几个node就你的节点中粘贴执行即可
kubeadm join 192.168.88.100:6443 --token osgyk1.ewoygvudbb84xk3l \
--discovery-token-ca-cert-hash sha256:4c17899291da6c9888c1f5f02454bcf471a4a3ae214dbe85f2178953456665c1
这个比较关节
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安装的东西稍多了一些,我只是梳理了一下。便于小伙伴们理解。
参考: