🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## **一、前置条件** * 准备两台主机:master:192.168.2.101, node:192.168.2.102 * 两台主机已安装好kubeadm、kubelet、kubectl、docker; ## **二、安装Master** #### **2.1初始化Master** ``` $ kubeadm init --kubernetes-version v1.17.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr 172.26.0.0/16 ... Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.2.101:6443 --token uq0q6m.2hzh55l00usfq7a6 \ --discovery-token-ca-cert-hash sha256:6e14b72685f492206fabfe4417f29f5c2a0b13ce912ca2a4f568679b03e9a868 ``` #### **2.2 为当前用户配置kubeconfig** 为了让当前用户能使用kubectl命令,执行以下命令 ``` $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` #### **2.3 安装网络插件** 这里我们使用calico网络插件,下载 [calico.yaml](https://docs.projectcalico.org/v3.8/manifests/calico.yaml) 文件,然后将里面的`192.168.0.0/16`更改为上面的`172.26.0.0/16`(此次实验发现没有更改的话,Pod的IP就是192.168的),然后执行以下命令安装calico ``` $ kubectl apply -f calico.yaml ``` #### **2.4 验证Master节点** ``` $ kubectl get node NAME STATUS ROLES AGE VERSION peng01 Ready master 3m37s v1.17.3 ``` ## **三、安装Node** #### **3.1 获取Token** 在master上执行以下命令,获取bootstrap token,输出如下: ``` $ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS uq0q6m.2hzh55l00usfq7a6 23h 2020-07-10T16:34:37+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token ``` 我们发现这个token还没有过期,可以直接使用。如果token已经过期了或者没有了token,则可以使用下面的命令创建一个 ``` $ kubeadm token create h5agml.npsrmev7t4s2j3m6 ``` 然后查看,发现有两个token,它们都是可以使用的 ``` $ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS h5agml.npsrmev7t4s2j3m6 23h 2020-07-10T16:58:32+08:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token uq0q6m.2hzh55l00usfq7a6 23h 2020-07-10T16:34:37+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token ``` #### **3.3 加入集群** 在master上执行以下命令获取`--discovery-token-ca-cert-hash`,输出如下,这个hash值是一直不会变的 ``` $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 6e14b72685f492206fabfe4417f29f5c2a0b13ce912ca2a4f568679b03e9a868 ``` 然后使用上面两个token的任意一个,执行以下命令将Node加入到集群中 ``` $ kubeadm join 192.168.2.101:6443 --token uq0q6m.2hzh55l00usfq7a6 \ --discovery-token-ca-cert-hash sha256:6e14b72685f492206fabfe4417f29f5c2a0b13ce912ca2a4f568679b03e9a868 ``` #### **3.4 查看Node** ``` $ kubectl get node NAME STATUS ROLES AGE VERSION peng01 Ready master 28m v1.25.5 peng02 Ready <none> 27s v1.25.5 ``` ## **四、去掉Master节点的污点** 默认情况下,master节点上有一个污点,我们需要去掉这个污点,使用Pod能正常调度到master节点上。执行以下命令: ``` $ kubectl taint node --all node-role.kubernetes.io/master- ```