Kubernetes 安装
1. 安装 docker 和 kubernetes
每台电脑都需要安装。参考本篇文章 Linux 新系统安装配置清单 里安装 docker 和 kubernetes 的步骤。
2. 准备阶段(所有服务器)
2.1 关闭 swap
运行 kubernetes 需要关闭 swap 。
使用以下命令临时关闭 swap
sudo swapoff -a
永久关闭可以直接编辑 /etc/fstab
, 把 swap 的挂载部分注释掉。
2.2 提前拉取所需镜像(可忽略,已集成到下面初始化命令中)
由于众所周知的原因,直接初始化 k8s 可能拉取不到镜像,这里先手动拉取一次,加速后续的初始化步骤。
# 查看所需镜像 kubeadm config images list # 使用国内代理拉取镜像 kubeadm config images pull --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers # 镜像重命名 for tag in `docker images --format "{{.Repository}}:{{.Tag}}" | grep registry.cn-hangzhou.aliyuncs.com/google_containers`; do new_tag=${tag/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io} docker tag ${tag} ${new_tag} docker rmi ${tag} done
3. 初始化(主 master 服务器)
使用 root 账号执行:
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers # --pod-network-cidr=10.244.0.0/16 表示使用 flannel 网络 # 可以通过参数 --apiserver-advertise-address 192.168.56.105 指定监听ip # --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers # 使用国内代理拉取镜像,后续子节点也是从该代理获取镜像,一次配置即可。
4. 配置授权信息(主 master 服务器)
推荐使用普通账号,平时只用普通账号来控制 k8s 。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 启用 kubectl 命令的自动补全功能 echo "source <(kubectl completion bash)" >> ~/.bashrc
5. 加入集群(node 服务器)
在 node 服务器上执行 kubeadm join
语句,该语句在初始化后会显示出来。
6. 安装 flannel (主 master 服务器)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
其他: 可能会用到的控制命令
kubectl get nodes # 查看节点状态 kubectl describe nodes <ip> # 查看单个 node 信息 kubectl get pods # 查看运行的镜像 kubectl get pods --all-namespaces # 查看所有命名空间的 pod kubectl get deployments # 查看部署情况 kubectl get services # 查看运行的服务 kubectl apply -f app.yml # 应用 kubectl delete -f app.yml # 删除 kubeadm reset # 重置 (退出集群)
其他: 可能出现的问题
由于 kube-proxy
与 nftables
有兼容性问题(官方说已解决,待验证)。如果系统用的是 iptables 且 iptables 用的是 nftables ,建议把 iptables 改成 legacy 版本。
# 参考 https://wiki.debian.org/iptables update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy update-alternatives --set arptables /usr/sbin/arptables-legacy update-alternatives --set ebtables /usr/sbin/ebtables-legacy