环境

  1. 系统:centos7
  2. docker版本:docker-ce-19.03.8-3.el7
  3. k8s安装方式:kubeadm
  4. kubelet、kubeadm、kubectl版本:kubelet-1.18.5、kubeadm-1.18.5、kubectl-1.18.5
  5. k8s相关镜像版本:通过kubeadm config images list查看相关镜像的版本

    1. k8s.gcr.io/kube-apiserver:v1.18.15
    2. k8s.gcr.io/kube-controller-manager:v1.18.15
    3. k8s.gcr.io/kube-scheduler:v1.18.15
    4. k8s.gcr.io/kube-proxy:v1.18.15
    5. k8s.gcr.io/pause:3.2
    6. k8s.gcr.io/etcd:3.4.3-0
    7. k8s.gcr.io/coredns:1.6.7
  6. 安装配套wave镜像:kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

    安装步骤

    卸载旧版本kubelet、kubeadm、kubectl

    1. yum list installed | grep kubectl
    2. yum list installed | grep kubeadm
    3. yum list installed | grep kubelet
    4. yum remove -y kubelet kubeadm kubectl
    5. kubeadm reset -f
    6. modprobe -r ipip
    7. lsmod
    8. rm -rf ~/.kube/
    9. rm -rf /etc/kubernetes/
    10. rm -rf /etc/systemd/system/kubelet.service.d
    11. rm -rf /etc/systemd/system/kubelet.service
    12. rm -rf /usr/bin/kube*
    13. rm -rf /etc/cni
    14. rm -rf /opt/cni
    15. rm -rf /var/lib/etcd
    16. rm -rf /var/etcd

    配置kubernetes镜像地址

    1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    2. [kubernetes]
    3. name=Kubernetes
    4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    5. enabled=1
    6. gpgcheck=1
    7. repo_gpgcheck=1
    8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    9. EOF
    10. setenforce 0

    安装kubelet、kubeadm、kubectl

    1. yum install -y kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5 --disableexcludes=kubernetes

    拉取和部署kubernetes其他模块镜像

  7. 查看安装的kubeadm-1.18.5需要哪些镜像和镜像版本

    1. kubeadm config images list
  8. centos安装kubernetes - 图1

  9. 拉取镜像
    上面查找的镜像,k8s.gcr.io是下载不到的,所以要换一个镜像地址,下面是用阿里的镜像地址

    1. # docker pull k8s.gcr.io/kube-apiserver:v1.18.15
    2. # docker pull k8s.gcr.io/kube-controller-manager:v1.18.15
    3. # docker pull k8s.gcr.io/kube-scheduler:v1.18.15
    4. # docker pull k8s.gcr.io/kube-proxy:v1.18.15
    5. # docker pull k8s.gcr.io/pause:3.2
    6. # docker pull k8s.gcr.io/etcd:3.4.3-0
    7. # docker pull k8s.gcr.io/coredns:1.6.7
    8. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.15
    9. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.15
    10. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.15
    11. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.15
    12. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
    13. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
    14. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
  10. 为镜像添加新的tag

    1. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.15 k8s.gcr.io/kube-apiserver:v1.18.15
    2. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.15 k8s.gcr.io/kube-controller-manager:v1.18.15
    3. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.15 k8s.gcr.io/kube-scheduler:v1.18.15
    4. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.15 k8s.gcr.io/kube-proxy:v1.18.15
    5. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
    6. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
    7. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

    初始化kubernetes集群

    执行命令,打印的日志出现如下图所示,表示初始化成功

    1. kubeadm init --kubernetes-version=v1.18.15

    centos安装kubernetes - 图2

    配置kubectl访问集群的配置

    上一步骤输出的内容提示要执行下面的命令,然后就可以用kubectl访问k8s

    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

    centos安装kubernetes - 图3
    coredns两个podstatus一直是Pending,因为还没有部署上面提到的wave

    部署wave

    执行下面的代码,部署Weave,等这个pod启动成功后,发现coredns容器也ok

    1. kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

    centos安装kubernetes - 图4

    执行单机集群的命令

    1. kubectl taint nodes --all node-role.kubernetes.io/master-

    安装结束

    安装结束,此时可以在服务器通过kubectl访问k8s,但是其他服务器或者windowskubectl是无法访问到k8s的,因为k8s默认只会在内网使用。

    kubectl远程访问k8s

    配置kubectl访问集群的配置的步骤中,执行的脚本拷贝了k8s生成的密钥信息,$HOME/.kube/config文件,所以kubectl可以访问到kube-apiserver,下面重新生成密钥信息,使外网的kubectl可以访问kube-apiserver

  11. cd /etc/kubernetes/pki
    此文件路径下,都是k8s的配置,是kubeadm生成的,其中我们重新生成apiserver.crtapiserver.key

  12. 导出集群正在使用的配置

    1. kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
  13. vi kubeadm.yaml
    编辑导出的配置文件,添加服务器ip,圈住的是我添加的,其他信息都是已有
    centos安装kubernetes - 图5

  14. 移除旧的证书

    1. mv /etc/kubernetes/pki/apiserver.{crt,key} ~
  15. 生成新的证书

    1. kubeadm init phase certs apiserver --config kubeadm.yaml
  16. 杀掉kube-apiserver容器,k8s自动重启

    1. docker kill $(docker ps | grep kube-apiserver | grep -v pause | awk '{print $1}')
  17. 加载修改后的kubeadm.yaml

    1. kubeadm config upload from-file --config kubeadm.yaml
  18. $HOME/.kube/config拷贝到windows或者其他服务器上,修改其中的server配置为k8s的外网IP。圈住的地方,改为k8s服务器的外网地址。(windows安装kubectl详见windows配置kubectl访问k8s集群
    centos安装kubernetes - 图6