使用kubeadm创建单个control plane群集
初始化control-plane节点
1.参数
control plane节点是control plane组件运行的机器,包括etcd(集群数据库)和API服务器(kubectl CLI与之通信)。
- 选择一个pod网络加载项,并验证是否需要将任何参数传递给kubeadm初始化。取决于您选择的第三方提供商可能需要设置
--pod-network-cidr
来提供特定的值。
-
(可选)从版本1.14开始,kubeadm将尝试使用众所周知的域套接字路径列表来检测Linux上的容器运行环境。要使用不同的容器运行环境,或者在已配置的节点上安装了多个容器运行环境,在运行
--cri-socket
参数给
kubeadm init
命令。
-
(可选)除非另有说明,否则kubeadm使用与默认网关关联的网络接口来与master机器IP通信。要使用其他网络接口,请指定
--apisever-advertise-address=<ip-address>
参数运行
kubeadm init
命令。要使用IPv6寻址部署IPv6 Kubernetes群集,必须指定IPv6地址比如
--apiserver-advertise-address=fd00::101
- (可选)在kubeadm init之前运行kubeadm config images pull以验证与gcr.io仓库的连接。
2.配置docker proxy
因为要下载k8s的数据,所以需要配置docker代理。
# systemctl stop docker
# vim /lib/systemd/system/docker.service
在 Service 部分下 增加 Environment 变量,配置成你自己的代理地址,如下
[Service]
Environment="HTTP_PROXY=socks5://127.0.0.1:1080/"
重启 docker
# systemctl daemon-reload
# systemctl start docker
3.运行
#关闭虚拟内存
sudo swapoff -a
#运行kubeadm init 为了接下来添加network add-on所以设置网络加载项
kubeadm init --pod-network-cidr=10.244.0.0/16
如果让非root用户使用kubectl,则运行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如您是root用户,则可以运行
export KUBECONFIG=/etc/kubernetes/admin.conf
4.安装pod network add-on
必须安装pod网络插件,pod才可以相互通信。
本文使用flannel,要使flannel正常工作,你必须将--pod-network-cidr=10.244.0.0/16参数传递给kubeadm init。
通过运行sysctl net.bridge.bridge-nf-call-iptables = 1将/ proc / sys / net / bridge / bridge-nf-call-iptables设置为1,将桥接的IPv4流量传递给iptables的链。
确保防火墙允许所有主机的8285和8472UDP端口开放。
请注意,flannel适用于Linux下的amd64,arm,arm64,ppc64le和s390x。声称Windows(amd64)在v0.11.0中受支持,但用法未记录。
运行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
安装了pod network add-on后,可以通过在kubectl get pods --all-namespaces的输出中检查CoreDNS pod正在运行来确认它是否正常工作。一旦CoreDNS pod启动并运行,可以继续加入新的节点。
Control plane node
默认情况下,出于安全原因,您的群集不会在control plane 节点上安排pod。如果您希望能够在控制平面节点上安排pod,例如对于用于开发的单机Kubernetes集群,运行:
kubectl taint nodes --all node-role.kubernetes.io/master-
输出
node "test-01" untainted
taint "node-role.kubernetes.io/master:" not found
taint "node-role.kubernetes.io/master:" not found
这将从任何拥有它的节点(包括control plane节点)中删除node-role.kubernetes.io/master污染,这意味着调度程序将能够在任何地方安排pod。