下载 Docker 镜像
此镜像在 kubernetes 的仓库中,由于网络原因,无法连接,可以采用替代方案:
IMAGES=(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns:1.6.5)

for iname in ${IMAGES[@]};dodocker pull registry.aliyuncs.com/google_containers/$inamedocker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$inamedocker rmi registry.aliyuncs.com/google_containers/$inamedone

综上,如果不行,以下是完整代码,可直接复制到终端:
#!/bin/bashIMAGES=(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns:1.6.5)for iname in ${IMAGES[@]};dodocker pull registry.aliyuncs.com/google_containers/$inamedocker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$inamedocker rmi registry.aliyuncs.com/google_containers/$inamedone
集群初始化
在 master 节点上操作
# 由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址# apiserver-advertise-address 需要写自己的ipkubeadm init \--apiserver-advertise-address=192.168.177.100 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version=v1.17.4 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12

#使用 kubectl 工具mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

然后我们需要将 node 节点加入集群中,在 node 服务器上执行下述红框的命令加入到 master:

注:重新配置命令 kubeadm reset
集群初始化成功,master 中查看节点:
[root@master /]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster NotReady master 43m v1.17.4node01 NotReady <none> 10s v1.17.4node02 NotReady <none> 27m v1.17.4
初始化的一些踩坑
- 节点名称问题:不能有两个 node 节点名称相同;
- 内存问题:主节点 Master 的内存要尽量大,调整到了4G;
- 时间同步问题:一定要事先确认一下三台主机的时间是否同步;
- 如果出现了 kubeadm init 的端口被占用的问题,使用
kubeadm reset进行重设; - 出现了 kubeadm token list 报错问题,有两种情况:
- 内存不够,用
free -h进行查看; - kubeadm init 的时候出错,后面要记得加上如下命令对文件的配置进行修改。
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件
Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等等,任选一种使用即可。
本次选择 flannel 下面操作依旧只在 master 节点执行即可,插件使用的是 DaemonSet 的控制器,它会在每个节点上都运行。
Ready ,至此 K8S 网络集群搭建完成。# 获取fannel的配置文件[root@master ~]# wgethttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml[root@master ~]# kubectl apply -f kube-flannel.yml# 稍等片刻,再次查看集群节点的状态[root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready master 104m v1.17.4node01 Ready <none> 61m v1.17.4node02 Ready <none> 88m v1.17.4[root@master ~]#
环境测试
使用 nginx 来判断是否成功部署,并开启一个pod 。# 部署nginx[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine# 暴露端口[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort# 查看服务状态[root@master ~]# kubectl get pods,serviceNAME READY STATUS RESTARTS AGEpod/nginx-86c57db685-fdc2k 1/1 Running 0 18mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 82mservice/nginx NodePort 10.104.121.45 <none> 80:30073/TCP 17m

- 内存不够,用
