使用 Kubernetes 对 Docker 容器进行快速编排成为新的微服务时代的部署风潮。
部署 Kubernetes
Kubernetes 有多种部署方式,一般不是很推荐使用 kubeadm
方式安装(主要是因为众所周知的大陆网络原因)但好在相关所需的镜像一般国内都有存档,可以使用国内容器仓库进行中转使用。
部署 kubeadm
在安装 kubeadm 工具箱之前需要确认软硬件兼容性:
需求
下列系统之一
- Ubuntu 16.04+
- Debian 9+
- CentOS 7+
- RHEL 7+
- Fedora 25+
- HypriotOS v1.0.1+
- Flatcar Container Linux (2512.3.0 版已测)
- 每个节点都具有 2 GB 及以上 RAM
- 2 CPUs 双核及以上
- 集群内各节点网络互通(私网、公网即可)
- 每个节点都有唯一的
hostname
、MAC address
和product_uuid
- 部分端口处于可用状态
- 禁用 Swap 分区,必须禁用交换分区以便
kubelet
服务正常工作
确认节点唯一
确保 MAC 地址和设备识别码在集群内唯一
- MAC 地址可以通过
ip link
或ifconfig -a
命令查看 - 设备识别码可以通过
sudo cat /sys/class/dmi/id/product_uuid
查看
小贴士:如果服务器使用硬盘克隆或者批量部署的虚拟机可能存在此问题,一般情况下可忽略。
网络通讯
让 iptables
接管流量,确保当前使用的是 br_netfilter
模块。
$ lsmod | grep br_netfilter # 查看是否已加载
$ sudo modprobe br_netfilter # 如果未加载需要手动加载(需要内核的支持)
设备启动时默认加载
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
加载模块后需要确认 sysctl
配置中 net.bridge.bridge-nf-call-iptables
参数被设置为 1
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
检查系统 sysctl 配置
sudo sysctl --system
检查所需端口
全新机器可以跳过本步骤,主要是为了防止端口冲突导致。
控制节点
Protocol Direction Port Range Purpose Used By TCP Inbound 6443* Kubernetes API server All TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd TCP Inbound 10250 Kubelet API Self, Control plane TCP Inbound 10251 kube-scheduler Self TCP Inbound 10252 kube-controller-manager Self 工作节点
Protocol Direction Port Range Purpose Used By TCP Inbound 10250 Kubelet API Self, Control plane TCP Inbound 30000-32767 NodePort Services† All
禁用交换分区
Kubernetes 的 kubelet 使用需要禁用 Swap 交换分区,否则可能产生无法预料的错误。
sudo swapoff -a
小贴士:推荐在服务器安装时手动配置分区表,将 swap 分区删除,否则可能导致开机后自动挂载 swap 分区,也需要记得注释掉 fstab 中的 swap 分区,防止机器重启后自动挂载。
一键删除交换分区
grep swap /etc/fstab && sudo sed -i.bak '/swap/d' /etc/fstab
不同发行版
CentOS
部署 repo
海外及中国港澳台等地区请使用(官方镜像)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
中国大陆请使用(阿里云镜像)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
小贴士:如果使用国内源安装时出现类似报错 GPG Error ,这是因为 GPG 同步异常,请使用 yum install -y --nogpgcheck
命令安装。
Debian
安装依赖
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
部署 repo
海外及中国港澳台等地区请使用(官方镜像)
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
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
中国大陆请使用(阿里云镜像)
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
安装
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
配置及优化
命令行补全
为 kubectl kubeadm 命令配置命令行补全功能
kubectl
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
kubeadm
mkdir ~/.kube kubeadm completion bash | tee ~/.kube/kubeadm_completion.bash.inc printf "\n# Kubeadm shell completion\nsource '$HOME/.kube/kubeadm_completion.bash.inc'\n" >> $HOME/.bash_profile
附录
相关链接
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2022-02-25 18:02 PM