参考:
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/
https://docs.projectcalico.org/v3.6/getting-started/kubernetes/
Kubeadm 是一个工具,它提供了 kubeadm init
以及 kubeadm join
这两个命令作为快速创建 kubernetes 集群的最佳实践。kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。
1. 关闭防火墙:
systemctl stop firewalld & systemctl disable firewalld
2. 关闭swap:
编辑/etc/fstab
,注释掉包含swap
的那一行即可,重启后可永久关闭,如下所示:
/dev/mapper/centos-root / xfs defaults 0 0
UUID=20ca01ff-c5eb-47bc-99a0-6527b8cb246e /boot xfs defaults 0 0
# /dev/mapper/centos-swap swap
或直接执行:
sed -i '/ swap / s/^/#/' /etc/fstab
需要重启,该改动才会生效。
3. 关闭SeLinux:
执行:setenforce 0
4. 安装docker
添加阿里云仓库,然后安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
启动docker:
systemctl start docker & systemctl enable docker
5. 安装k8s组件:
先配置k8s源,然后安装。
国内阿里:
cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
6.启动kubelet
systemctl enable kubelet && systemctl start kubelet
以上配置,可以首先在虚拟机中完成,然后再对虚拟机进行复制,分别充当master、node。
创建集群
1. 默认配置
kubeadm init
2. 使用calico网络
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.10.0 --apiserver-advertise-address=192.168.56.101
--kubernetes-version可以使用kubectl version进行查看。
--apiserver-advertise-address string | |
API Server将要广播的监听地址。如指定为 `0.0.0.0` 将使用缺省的网卡地址。 | |
--apiserver-bind-port int32 缺省值: 6443 | |
API Server绑定的端口 |
创建成功后会输出如下内容:
xxx
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.0.2.15:6443 --token 8jdtq5.0dkx1lwiczfmi9s4 \
--discovery-token-ca-cert-hash sha256:945f8f92df6a2ff6a28a67bb81691f7f3021fe27c066754c6584bee0b618c5a0
注:如果没有初始化成功,想要再次执行,需要先执行命令kubeadm reset。
在创建集群成功之后
根据输出提示可知,还需要执行相应命令,服务才会彻底启动。
首先执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后配置网络,这里使用calico网络,参考:https://docs.projectcalico.org/v3.6/getting-started/kubernetes/
kubectl apply -f \
https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
此时使用如下命令。可以看到所有服务都启动了(可能要等一会儿)
watch kubectl get pods --all-namespaces
按Ctrl+C退出。
接下来就可以添加其他节点了。
出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使用,可以执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master-
其中k8s-master是主机节点的hostname。
或者将所有节点都作为Node使用:
kubectl taint nodes --all node-role.kubernetes.io/master-
如果要恢复Master Only状态,执行如下命令:
kubectl taint node k8s-master node-role.kubernetes.io/master=""
添加其他节点:
如果想将其他机器加入到该集群中,想加入的机器必须执行了我前面描述的那6步。
主要使用kubeadm join命令。
复制在master节点使用kubeadm init生成的命令:
kubeadm join 10.0.2.15:6443 --token 8jdtq5.0dkx1lwiczfmi9s4 \
--discovery-token-ca-cert-hash sha256:945f8f92df6a2ff6a28a67bb81691f7f3021fe27c066754c6584bee0b618c5a0