目录

Kubernetes 安装

本文以 Debian 10 为例,进行 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-proxynftables 有兼容性问题(官方说已解决,待验证)。如果系统用的是 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