博客文章地址:https://blog.taoluyuan.com/posts/install-k8s/
[环境准备] 这章的操作都要在两台机器上分别执行,我准备了两台机器,如下:
如已经安装好docker 可跳过
docker 官方安装 https://docs.docker.com/engine/install/ubuntu/ 有点慢
清华大学 镜像安装方法 https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
安装依赖
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 docker-ce
sudo apt-get update
sudo apt-get install docker-ce
docker组授予用户根级权限,让当前登陆也可以使用docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
镜像加速器
通过修改daemon配置文件/etc/docker/daemon.json修改 registry,我使用的是上海交大
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn/"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
阿里云官方推荐源
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 </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
安装1.22.0版本
apt-get install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00
查看版本
kubelet --version
kubeadm version
kubectl version
kubelet 开机自启
systemctl enable kubelet
从 v1.22 开始,在使用 kubeadm 创建集群时,kubeadm 默认使用 systemd,而 docker 默认使用 cgroupfs,所以需要修改 docker 的 cgroup 驱动程序为 systemd,k8s cgroup-drivers说明
打开 /etc/docker/daemon.json 文件,追加以下配置
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
查看cgroup驱动,必须是systemd,才行
docker info|grep Cgroup
设置 swapoff
sudo swapoff -a
永久设置 swapoff,注释掉swap那一行
vim /etc/fstab
查看swapon,必须是空的,不然接下来的kubeadm init会报错
swapon -s
sudo kubeadm config images pull --kubernetes-version=v1.22.0 --image-repository registry.aliyuncs.com/google_containers
sudo kubeadm init --kubernetes-version=v1.22.0 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
kubectl get nodes
应该会 出现 localhost:8080 was refused - did you specify the right host or port? 错误
将 /etc/kubernetes/admin.conf 拷贝到 $HOME/.kube/config
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown -R $USER:$USER $HOME/.kube
再查看nodes状态
此时获取节点状态会发现有一个节点是 NotReady 状态,
而且,查看pod状态会发现,coredns 也是 Pending 状态
kubectl get pods --all-namespaces
这是因为还没有安装网络插件,这里我选择安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
网络不好可以使用ghproxy
kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待会再次查看pod状态,coredns状态是 Running,节点状态是 Ready
kubeadm token create --print-join-command --ttl 0 --kubeconfig /etc/kubernetes/admin.conf
会出现 类似以下 join 命令
kubeadm join 192.168.31.122:6443 --token kzmdey.dk0tcgyg4ivr8y87 --discovery-token-ca-cert-hash sha256:bc2e3252080ba81e342933955682ae119decc948fef2180e5135b0dd891e5891
k get nodes -o wide
可以看到两个节点都是 Ready 状态
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
song Ready control-plane,master 45h v1.22.0 192.168.31.122 Ubuntu 22.10 5.19.0-21-generic docker://24.0.2
song2 Ready 77m v1.22.0 192.168.31.166 Ubuntu 22.10 5.19.0-21-generic docker://24.0.2
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
swapoff -a
sudo systemctl status kubelet.service
sudo journalctl -xu kubelet.service