通过kubeadm搭建Kubernetes(1.16.0版本)集群环境

  |   评论   |   浏览

 如遇图片加载失败,可尝试使用手机流量访问

安装Docker(所有节点)

  • Docker的安装
    CentOS 7下安装Docker及基础操作

    注意,不要安装最新的版本
    请结合Kubernets官方网站的文档说明,安装Kubernetes对于的Docker的版本;安装不匹配的版本,可能会出现问题,安装k8s的时候也会提示警告;这里安装的k8s 1.16.0,对应的Docker的版本查找方式如下

    • 进入Github的官方仓库
      Kubernetes github仓库

    • 找到对应的版本

      找到的你要安装的版本

      file 如遇图片加载失败,可尝试使用手机流量访问

    • 找到Unchanged
      file 如遇图片加载失败,可尝试使用手机流量访问

镜像制作

指定阿里云的镜像仓库(推荐)

// 只要docker安装好之后,不需要做过多的操作 // 在使用kubeadm init的时候 加上阿里云的仓库地址 // master节点安装的时候有详细说明 --image-repository registry.aliyuncs.com/google_containers

手动制作镜像

采用上面的方式可以忽略这个步骤!!
如果你扛的一手好梯子(科学上网),也可以忽略这一步;但是普遍情况下是无法访问到k8s.gcr.io进行镜像的下载;因此我们可以通过Docker的镜像转换为k8s的镜像;

  • 创建 k8s_pull.sh

    docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.16.0 docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.0 docker pull mirrorgooglecontainers/etcd-amd64:3.3.15-0 docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.16.0 docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.16.0 docker pull mirrorgooglecontainers/pause:3.1 docker pull coredns/coredns:1.6.2 docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.16.0 k8s.gcr.io/kube-apiserver:v1.16.0 docker tag mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0 docker tag mirrorgooglecontainers/kube-scheduler-amd64:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0 docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.16.0 k8s.gcr.io/kube-proxy:v1.16.0 docker tag mirrorgooglecontainers/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0 docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2 docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.16.0 mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.0 mirrorgooglecontainers/etcd-amd64:3.3.15-0 mirrorgooglecontainers/kube-scheduler-amd64:v1.16.0 mirrorgooglecontainers/kube-proxy-amd64:v1.16.0 mirrorgooglecontainers/pause:3.1 coredns/coredns:1.6.2
  • 下载镜像

    sh k8s_pull.sh

    file 如遇图片加载失败,可尝试使用手机流量访问

准备工作

  • 基础配置

    • 设置hosts(每个节点都做)

      vi /etc/hosts //添加以下配置 192.168.1.26 master 192.168.1.22 node01 192.168.1.21 node02
    • 设置hostnamectl(每个节点)

      // 在每个节点设置自己的主机名 即: /etc/hostname 下的值 设置好之后建议重启一下 // 也可以在各个节点 vim /etc/hostname 进行修改 hostnamectl set-hostname master hostnamectl set-hostname node01 hostnamectl set-hostname node02
    • 关闭防火墙(测试环境)

      // 在内网网络环境安全的情况下,可以关闭防火墙 systemctl disable firewalld systemctl stop firewalld
    • 开放端口(生产)

      //防火墙对外开放以下端口 //MASTER节点 6443 Kubernetes API server 2379-2380 etcd server client API 10250 Kubelet API 10251 kube-scheduler 10252 kube-controller-manager 10255 Read-only Kubelet API (Heapster) //Worker节点 10250 Kubelet API 10255 Read-only Kubelet API (Heapster) 30000-32767 Default port range for NodePort Services. Typically, these ports would need to be exposed to external load-balancers, or other external consumers of the application itself.
    • 更新系统时间(每个节点)重要

      yum install -y ntpdate // 更新系统时间 时间不一致将无法加入到集群 ntpdate time.windows.com // 将系统时间同步到硬件,防止系统重启后时间被还原 hwclock --systohc // 由于部分机器重启之后系统时间会恢复 因此做以下设置 // 添加定时任务,设置5分钟更新一次时间 echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com > /dev/null 2>&1" >> /var/spool/cron/root // 配置开机执行,电脑在开机之后会执行更新时间 echo "/usr/sbin/ntpdate time.windows.com > /dev/null 2>&1" >> ~/.bashrc // 重启定时任务 systemctl restart crond.service // 查看定时任务 crontab -l
  • 主机禁用SELinux

    setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

    file 如遇图片加载失败,可尝试使用手机流量访问

  • 禁用Swap

    swapoff -a # 临时 sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
  • 配置k8s.conf

    cat <<EOF >> /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p /etc/sysctl.d/k8s.conf sysctl --system
  • 配置Kubernetes国内yum源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

    file 如遇图片加载失败,可尝试使用手机流量访问

安装(所有节点)

  • 安装kubelet、kubeadm、kubectl

    // -后面跟的是版本,安装k8s匹配的版本 yum install -y kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0

    file 如遇图片加载失败,可尝试使用手机流量访问

  • Docker访问hub.docker.com不稳定的设置

    // 如果访问稳定的话可以不设置 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
  • 重启Docker

    systemctl daemon-reload && systemctl restart docker && systemctl enable docker
  • 启动 kubelet

    systemctl enable kubelet && systemctl start kubelet

部署主节点

  • 日志查看路径

    tail -f /var/log/messages
  • 初始化主节点

    kubeadm init \ --apiserver-advertise-address=192.168.1.26 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.16.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap // --apiserver-advertise-address apiserver的地址,也就是master节点的地址 // --image-repository 指定镜像仓库的地址 // --kubernetes-version k8s的版本 // --pod-network-cidr=10.244.0.0/16 后面使用flannel作为网络插件 这里指定pod的网络 // --service-cidr service的网络 // --ignore-preflight-errors=Swap 忽略swap的错误

    file 如遇图片加载失败,可尝试使用手机流量访问
    安装成功之后,docker ps可以看到以下运行的容器
    file 如遇图片加载失败,可尝试使用手机流量访问

  • node加入集群的指令(注意!!! 以下的这部分很重要)

    成功日志的最后一行为node节点加入的指令

    kubeadm join 192.168.1.22:6443 --token 91bfpw.smdtbfzc5ebsyldr \ --discovery-token-ca-cert-hash sha256:a769a93dbec36b321195398380b590787cae98e9eb408d1fdb9e52af8c58d2dd
    • 查看token

      //在master节点执行以下指令 kubeadm token list

      file 如遇图片加载失败,可尝试使用手机流量访问

    • 创建一个新的token

      //创建一个临时token(24小时失效) kubeadm token create // 创建一个永久有效的token kubeadm token create --ttl 0 --print-join-command

      file 如遇图片加载失败,可尝试使用手机流量访问

  • 复制配置文件到普通用户的host目录

    mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 验证configmap

    kubectl get -n kube-system configmap

    file 如遇图片加载失败,可尝试使用手机流量访问

  • 安装网络插件

    // 建议先按以下方式下载,避免耗时 docker pull pengfeilu/flannel:v0.11.0-amd64 docker tag pengfeilu/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64 docker rmi pengfeilu/flannel:v0.11.0-amd64 // 或者直接下载 docker pull quay.io/coreos/flannel:v0.11.0-amd64 // 再执行 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml // 上面的指令执行成功之后需要等几分钟之后相关pod才能正常启动,下面是启动前后的截图 kubectl get pods -n kube-system // 下载成功之后就不用管了,k8s会自动将镜像启动的 // 同理,如果node节点更新失败,也可以手动下载镜像

    file 如遇图片加载失败,可尝试使用手机流量访问

Node节点部署

  • 准备工作

    从本文的开始到镜像制作的部分都在Node节点上执行一遍;也就是准备工作部分安装部分镜像准备部分都与主节点操作一致

  • 加入主节点

    • 通过Master启动时的指令

      kubeadm join 192.168.1.22:6443 --token 91bfpw.smdtbfzc5ebsyldr \ --discovery-token-ca-cert-hash sha256:a769a93dbec36b321195398380b590787cae98e9eb408d1fdb9e52af8c58d2dd \ --ignore-preflight-errors=Swap

      file 如遇图片加载失败,可尝试使用手机流量访问

    • 更多节点同上操作即可

  • 主节点查看节点情况

    kubectl get nodes // 出现下图说明集群环境已经正常

    file 如遇图片加载失败,可尝试使用手机流量访问

  • 查看端口占用情况

    // 查看当前主机的那些端口被占用了 ss -tnl // 根据端口号查询对应的进程id ss -lnp | grep 端口号

重装Master

master安装可能因为一些配置的问题导致失败,但是由于master是由很多模块组成,因此可能装到一半,因为一些异常导致安装失败,再次安装的时候,可能会报端口被占用的情况;可以使用下面的指令重装

kubeadm reset

file 如遇图片加载失败,可尝试使用手机流量访问

// 查询初始化安装 kubeadm init --config kubeadm.yaml
  • 重装可能出现的错误

    [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

    file 如遇图片加载失败,可尝试使用手机流量访问

    解决方案可参考可参考:https://cloud.tencent.com/developer/article/1454325

其他错误

  • python版本错误

    yum 安装的时候 出现以下错误

    file 如遇图片加载失败,可尝试使用手机流量访问

    //vim /usr/bin/yum //将第一行的python版本 #!/usr/bin/python //改为下面这一行 #!/usr/bin/python2.7 //vim /usr/libexec/urlgrabber-ext-down 修改同上
  • 关闭Swap

    swapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab

    file 如遇图片加载失败,可尝试使用手机流量访问

  • Swap错误

    //启动指令加上 --ignore-preflight-errors=Swap

    file 如遇图片加载失败,可尝试使用手机流量访问

  • SELINUX禁用错误

    准备工作的时候有说道相关错误

    file 如遇图片加载失败,可尝试使用手机流量访问

  • Docker Cgroup Driver

    sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service

    file 如遇图片加载失败,可尝试使用手机流量访问


到此使用kubeadm搭建的kubernetes集群完成!!!



标题:通过kubeadm搭建Kubernetes(1.16.0版本)集群环境
作者:码霸霸
地址:https://blog.lupf.cn/articles/2019/11/23/1574512937074.html