下载 Docker 镜像

此镜像在 kubernetes 的仓库中,由于网络原因,无法连接,可以采用替代方案:

  1. IMAGES=(
  2. kube-apiserver:v1.17.4
  3. kube-controller-manager:v1.17.4
  4. kube-scheduler:v1.17.4
  5. kube-proxy:v1.17.4
  6. pause:3.1
  7. etcd:3.4.3-0
  8. coredns:1.6.5
  9. )

image.png

  1. for iname in ${IMAGES[@]};do
  2. docker pull registry.aliyuncs.com/google_containers/$iname
  3. docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
  4. docker rmi registry.aliyuncs.com/google_containers/$iname
  5. done

image.png
综上,如果不行,以下是完整代码,可直接复制到终端:

  1. #!/bin/bash
  2. IMAGES=(
  3. kube-apiserver:v1.17.4
  4. kube-controller-manager:v1.17.4
  5. kube-scheduler:v1.17.4
  6. kube-proxy:v1.17.4
  7. pause:3.1
  8. etcd:3.4.3-0
  9. coredns:1.6.5
  10. )
  11. for iname in ${IMAGES[@]};do
  12. docker pull registry.aliyuncs.com/google_containers/$iname
  13. docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
  14. docker rmi registry.aliyuncs.com/google_containers/$iname
  15. done

docker images 查看镜像列表:
image.png

集群初始化

在 master 节点上操作

  1. # 由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址
  2. # apiserver-advertise-address 需要写自己的ip
  3. kubeadm init \
  4. --apiserver-advertise-address=192.168.177.100 \
  5. --image-repository registry.aliyuncs.com/google_containers \
  6. --kubernetes-version=v1.17.4 \
  7. --pod-network-cidr=10.244.0.0/16 \
  8. --service-cidr=10.96.0.0/12

image.png

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

image.png
然后我们需要将 node 节点加入集群中,在 node 服务器上执行下述红框的命令加入到 master:
image.png
image.png
注:重新配置命令 kubeadm reset
集群初始化成功,master 中查看节点:

  1. [root@master /]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master NotReady master 43m v1.17.4
  4. node01 NotReady <none> 10s v1.17.4
  5. node02 NotReady <none> 27m v1.17.4

image.png

初始化的一些踩坑

  1. 节点名称问题:不能有两个 node 节点名称相同;
  2. 内存问题:主节点 Master 的内存要尽量大,调整到了4G;
  3. 时间同步问题:一定要事先确认一下三台主机的时间是否同步;
  4. 如果出现了 kubeadm init 的端口被占用的问题,使用 kubeadm reset 进行重设;
  5. 出现了 kubeadm token list 报错问题,有两种情况:
    1. 内存不够,用free -h 进行查看;
    2. kubeadm init 的时候出错,后面要记得加上如下命令对文件的配置进行修改。
      1. mkdir -p $HOME/.kube
      2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

      安装网络插件

      Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等等,任选一种使用即可。
      本次选择 flannel 下面操作依旧只在 master 节点执行即可,插件使用的是 DaemonSet 的控制器,它会在每个节点上都运行。
      1. # 获取fannel的配置文件
      2. [root@master ~]# wget
      3. https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      4. [root@master ~]# kubectl apply -f kube-flannel.yml
      5. # 稍等片刻,再次查看集群节点的状态
      6. [root@master ~]# kubectl get nodes
      7. NAME STATUS ROLES AGE VERSION
      8. master Ready master 104m v1.17.4
      9. node01 Ready <none> 61m v1.17.4
      10. node02 Ready <none> 88m v1.17.4
      11. [root@master ~]#
      Ready ,至此 K8S 网络集群搭建完成。

      环境测试

      使用 nginx 来判断是否成功部署,并开启一个pod 。
      1. # 部署nginx
      2. [root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
      3. # 暴露端口
      4. [root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
      5. # 查看服务状态
      6. [root@master ~]# kubectl get pods,service
      7. NAME READY STATUS RESTARTS AGE
      8. pod/nginx-86c57db685-fdc2k 1/1 Running 0 18m
      9. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      10. service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 82m
      11. service/nginx NodePort 10.104.121.45 <none> 80:30073/TCP 17m
      image.png