• k8s1.18.0完整部署教程


    k8s的官网地址:https://kubernetes.io/docs

    Kubernetes 也称为 K8s,是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。

    K8s通过各种资源对象来管理pod相关的功能,借助pod本身的功能实现大规模容器应用的自动化管理,实际上K8s就是一个大规模的容器应用管理平台

    1.搭建k8s集群

    本文使用kubeadm的方式来安装k8s

    安装 kubeadm |Kubernetes的kubeadm安装的官方文档:安装 kubeadm |Kubernetes的

    1.1k8s节点规划

    主机名ip
    master192.168.226.140
    node1192.168.226.141
    node2192.168.226.142

    1.2基础环境配置

    1.检查操作系统的版本

    1. # 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
    2. [root@master ~]# cat /etc/redhat-release
    3. CentOS Linux release 7.9.2009 (Core)

    2.配置阿里云yum源

    centos7.9的yum源不可用,更换一下

    1. #下载repo文件
    2. wget http://mirrors.aliyun.com/repo/Centos-7.repo
    3. # 备份并替换系统的repo文件
    4. cp Centos-7.repo /etc/yum.repos.d/
    5. cd /etc/yum.repos.d/
    6. mv CentOS-Base.repo CentOS-Base.repo.bak
    7. mv Centos-7.repo CentOS-Base.repo
    8. # 执行yum源更新命令
    9. yum clean all
    10. yum makecache
    11. yum update -y 

    3.配置三台主机的静态ip

     分别编辑三台主机的/etc/sysconfig/network-scripts/ifcfg-ens33文件

    1)文件内容要根据vmware的配置更改,具体如下:

    选择虚拟网络编辑器

    选择VMnet8的NAT设置

    可以看到ip地址是192.168.226.0这个网段的,所以下面配置静态ip也要在这个网段才能上网

    2)接下来分别编辑master,node1,node2的/etc/sysconfig/network-scripts/ifcfg-ens33文件

    可以看到默认配置是dhcp,这样的话每次重启虚拟机ip地址会更改,如果IP更改下面在配置ip地址映射的话会很不方便,所以要配置静态ip

    master主机配置

    1. [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens3
    2. TYPE=Ethernet
    3. PROXY_METHOD=none
    4. BROWSER_ONLY=no
    5. BOOTPROTO=static
    6. DEFROUTE=yes
    7. IPV4_FAILURE_FATAL=no
    8. IPV6INIT=yes
    9. IPV6_AUTOCONF=yes
    10. IPV6_DEFROUTE=yes
    11. IPV6_FAILURE_FATAL=no
    12. IPV6_ADDR_GEN_MODE=stable-privacy
    13. NAME=ens33
    14. UUID=5d60f1f8-5796-49c3-bd6d-6fcb36badf81
    15. DEVICE=ens33
    16. ONBOOT=yes
    17. IPADDR=192.168.226.140
    18. GATEWAY=192.168.226.2
    19. NETMASK=255.255.255.0
    20. PEERD=no

    node1主机配置

    1. [root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
    2. TYPE=Ethernet
    3. PROXY_METHOD=none
    4. BROWSER_ONLY=no
    5. BOOTPROTO=static
    6. DEFROUTE=yes
    7. IPV4_FAILURE_FATAL=no
    8. IPV6INIT=yes
    9. IPV6_AUTOCONF=yes
    10. IPV6_DEFROUTE=yes
    11. IPV6_FAILURE_FATAL=no
    12. IPV6_ADDR_GEN_MODE=stable-privacy
    13. NAME=ens33
    14. UUID=87c335e1-d0fc-4805-8b23-7ccd66ca2821
    15. DEVICE=ens33
    16. ONBOOT=yes
    17. IPADDR=192.168.226.141
    18. GATEWAY=192.168.226.2
    19. NETMASK=255.255.255.0
    20. PEERD=no

    node2主机配置

    1. [root@node2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
    2. TYPE=Ethernet
    3. PROXY_METHOD=none
    4. BROWSER_ONLY=no
    5. BOOTPROTO=static
    6. DEFROUTE=yes
    7. IPV4_FAILURE_FATAL=no
    8. IPV6INIT=yes
    9. IPV6_AUTOCONF=yes
    10. IPV6_DEFROUTE=yes
    11. IPV6_FAILURE_FATAL=no
    12. IPV6_ADDR_GEN_MODE=stable-privacy
    13. NAME=ens33
    14. UUID=70acb8ac-608a-443b-a59d-5b936bf6160f
    15. DEVICE=ens33
    16. ONBOOT=yes
    17. IPADDR=192.168.226.142
    18. GATEWAY=192.168.226.2
    19. NETMASK=255.255.255.0
    20. PEERD=no

    然后重启机器让ip配置生效,可以通过ip addr查看是否生效

    之后通过ping www.baidu.com检查网络是否正常,此时三台机器网络都不可用

    3)修改三台主机的/etc/resolv.conf文件,配置DNS服务器

    1. # Generated by NetworkManager
    2. # 三台主机在resolv.conf文件都增加下面这一行
    3. nameserver 114.114.114.114

    此时三台主机的网络都正常可用了

    4.修改主机名配置hosts映射

    修改主机名

    # 四台服务器分别进入/etc/hostname文件中,分别修改主机名为master、node1、node2、node3

    # 查看当前主机名

    hostname

    配置hosts映射

    # 配置hosts文件,添加主机名和ip地址映射

    vim /etc/hosts

    # 修改完第一台机器的ip映射后,然后分发到各个不同的机器上 xxx代表目标服务器的主机名

    scp /etc/hosts root@xxx:/etc/

     

    5.替换systemctl(如果systemctl不能用)

    下面使用systemctl的时候会出现如下情况,就需要进行替换,否则不用

    #在k8s集群每台机器分别执行

    #1.备份原来的systemctl文件

    mv /usr/bin/systemctl /usr/bin/systemctl.old

    #2.重新生成文件

    #打开https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py这个网站,将页面的所有内容都复制,然后在使用VIM命令打开systemctl文件,并将刚才复制的东西粘贴进去并保存

    vim /usr/bin/systemctl

    chmod +x /usr/bin/systemctl

    6.禁用firewalld服务

    1. #在k8s集群每台机器分别执行
    2. # 1 关闭firewalld服务
    3. [root@master ~]# systemctl stop firewalld
    4. [root@master ~]# systemctl disable firewalld
    5. #查看防火墙是否开启
    6. firewall-cmd --state

    7.禁用selinux

    1. #在k8s集群每台机器分别执行
    2. # 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
    3. # 注意修改完毕之后需要重启linux服务
    4. SELINUX=disabled
    5. # 查看状态
    6. sestatus

     

    8.关闭swap

    1. #k8s每台机器分别执行
    2. # 编辑分区配置文件/etc/fstab,注释掉swap分区一行
    3. # 注意修改完毕之后需要重启linux服务
    4. vim /etc/fstab
    5. 注释掉 /dev/mapper/centos-swap swap
    6. # /dev/mapper/centos-swap swap

    9. 设置ipv4和v6的流量链接

    1. cat << EOF >> /etc/sysctl.d/k8s.conf
    2. net.bridge.bridge-nf-call-ip6tables = 1
    3. net.bridge.bridge-nf-call-iptables = 1
    4. EOF
    5. # 生效
    6. sysctl --system

    10.同步时间

    1. yum -y install ntpdate
    2. ntpdate time.Windows.com

    基础配置完成重启机器

    1.3安装基础软件

    1.安装docker(所有节点)

    1. # 1、切换镜像源
    2. [root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    3. # 2、查看当前镜像源中支持的docker版本
    4. [root@master ~]# yum list docker-ce --showduplicates
    5. # 3、安装特定版本的docker-ce
    6. # 必须制定--setopt=obsoletes=0,否则yum会自动安装更高版本
    7. [root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
    8. # 4、添加一个配置文件
    9. #Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
    10. [root@master ~]# mkdir /etc/docker
    11. [root@master ~]# cat <<EOF> /etc/docker/daemon.json
    12. {
    13. "exec-opts": ["native.cgroupdriver=systemd"],
    14. }
    15. EOF
    16. # 5、启动dokcer
    17. [root@master ~]# systemctl restart docker
    18. [root@master ~]# systemctl enable docker
    19. # 6.测试
    20. docker run hello-world

    此时无法拉取镜像,会出现如下错误

    1. [root@master ~]# docker run hello-world
    2. Unable to find image 'hello-world:latest' locally
    3. latest: Pulling from library/hello-world
    4. c1ec31eb5944: Pulling fs layer
    5. docker: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/d2/d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a/data?verify=1723092638-fv94jBucnZv8F3RxbCAM5l5MA%2Fk%3D: dial tcp 108.160.163.106:443: connect: connection refused.
    6. See 'docker run --help'.

     要更换镜像源,在/etc/docker/daemon.json中添加如下配置

    1. {
    2.     "registry-mirrors": [
    3.         "https://do.nark.eu.org",
    4.         "https://dc.j8.work",
    5.         "https://docker.m.daocloud.io",
    6.         "https://dockerproxy.com",
    7.         "https://docker.mirrors.ustc.edu.cn",
    8.         "https://docker.nju.edu.cn"
    9.     ]
    10. }

    然后systemctl restart docker重启后重新拉取测试

    1. [root@master ~]# systemctl restart docker
    2. Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.
    3. To force a start use "systemctl reset-failed docker.service" followed by "systemctl start docker.service" again.

    出现这种情况可能是daemon.json里面有空格或者格式不对,然后修改为下面这样

    1. {
    2. "exec-opts": ["native.cgroupdriver=systemd"],
    3. "registry-mirrors": [ "https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
    4. }

     systemctl restart docker重启后重新拉取测试

    此时docker安装完成

    docker安装出现问题汇总

    1) Failed to get D-Bus connection: Operation not permitted

    更换systemctl

    2)docker无法启动,一直启动失败

    查看日志文件 /var/log/journal/docker.service.log会有如下报错

    can't initialize iptables table `nat': Permission denied (you must be root)

    此时可以修改/usr/lib/systemd/system/docker.service文件,对ExecStart=/usr/bin/dockerd 添加--iptables=false,也就是ExecStart=/usr/bin/dockerd --iptables=false

    3)文件系统需要由overlay2更换为vfs

    编辑/etc/docker/daemon.json。如果它还不存在,请创建后再编辑它。添加以下内容

    1. {
    2. "storage-driver": "vfs"
    3. }

    4)controller: error obtaining controller instance: Enabling IP forwarding failed: open /proc/sys/net/ ipv4/ip_forward: read-only file

    修改/proc/sys/net/ipv4/ip_forward内容为1,echo "1" > /proc/sys/net/ipv4/ip_forward

    2.安装Kubernetes组件(所有节点)

    1. # 更换镜像源
    2. # 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
    3. cat > /etc/yum.repos.d/kubernetes.repo << EOF
    4. [kubernetes]
    5. name=Kubernetes Repo
    6. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    7. gpgcheck=0
    8. enabled=1
    9. repo_gpgcheck=0
    10. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgp
    11. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    12. EOF
    13. # 查询kubeadm可用的版本
    14. yum list kubeadm --showduplicates
    15. # 安装kubeadm、kubelet、kubect
    16. yum install -y kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0
    17. # 设置kubelet开机自启
    18. systemctl enable kubelet

    1.4.集群初始化

    下面操作只需要在master节点执行

    1. # 创建集群
    2. # apiserver-advertise-address的ip地址是你master节点的ip地址
    3. [root@master ~]# kubeadm init --apiserver-advertise-address=192.168.226.140 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

    根据下面的提示分别在master和node上执行不同的操作 

    在master节点执行

    1. [root@master ~]# mkdir -p $HOME/.kube
    2. [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

    在node节点执行

    1. kubeadm join 192.168.226.128:6443 --token q64ha5.cuo0wdzca8sztzg9 \
    2. --discovery-token-ca-cert-hash sha256:d6b29a698a28cf1939ede7e4f7605635e05361a05bbea928e947147b512423a5

    在master节点上查看节点信息

    1. [root@master ~]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master NotReady master 18m v1.17.4
    4. node1 NotReady <none> 4m2s v1.17.4
    5. node2 NotReady <none> 3m57s v1.17.4

    1.5.安装网络插件,只在master节点操作即可

    从初始化信息提示可以去官网查看配置cni网络Installing Addons | Kubernetes

    进入官网可以看到有很多的解决方案,这里选择安装flannel

    1. [root@master ~]# mkdir /opt/k8s -p
    2. [root@master ~]# cd /opt/k8s/
    3. [root@master k8s]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

     修改kube-flannel.yml文件

    1. # 删除镜像docker.io的前缀
    2. sed -i 's#docker.io/##g' calico.yaml

    然后手动拉取镜像文件

    1. [root@master k8s]# grep image: kube-flannel.yml
    2. image: flannel/flannel-cni-plugin:v1.5.1-flannel1
    3. image: flannel/flannel:v0.25.5
    4. image: flannel/flannel:v0.25.5
    5. [root@master k8s]# docker pull flannel/flannel-cni-plugin:v1.5.1-flannel1
    6. v1.5.1-flannel1: Pulling from flannel/flannel-cni-plugin
    7. 3fb2a2b49db6: Pull complete
    8. bd4df3c464ff: Pull complete
    9. Digest: sha256:442c2f8e1f9d27145b4090d0e8819b72676d46ac95cc81e944a7b69f49db5151
    10. Status: Downloaded newer image for flannel/flannel-cni-plugin:v1.5.1-flannel1
    11. [root@master k8s]# docker pull flannel/flannel:v0.25.5
    12. v0.25.5: Pulling from flannel/flannel
    13. 3fb2a2b49db6: Already exists
    14. 6b518edcd22b: Pull complete
    15. b1e57e1b0d6e: Pull complete
    16. b678a87bf163: Pull complete
    17. de2b3914d857: Pull complete
    18. d804e8345c6b: Pull complete
    19. 535c74dae788: Pull complete
    20. 37965b9184b4: Pull complete
    21. 4f4fb700ef54: Pull complete
    22. b7757664f176: Pull complete
    23. Digest: sha256:4f65cc179d15e8ee4d67a6a32ce89c02094120a46452a4e0341d26be9fd556c3
    24. Status: Downloaded newer image for flannel/flannel:v0.25.5

    最后配置网络

    1. [root@master k8s]# kubectl apply -f kube-flannel.yml
    2. namespace/kube-flannel created
    3. clusterrole.rbac.authorization.k8s.io/flannel created
    4. clusterrolebinding.rbac.authorization.k8s.io/flannel created
    5. serviceaccount/flannel created
    6. configmap/kube-flannel-cfg created
    7. daemonset.apps/kube-flannel-ds created
    8. [root@master k8s]#

    等一会然后通过下面查看pod和节点状态 

    1. [root@master k8s]# kubectl get po -n kube-system
    2. NAME READY STATUS RESTARTS AGE
    3. coredns-7ff77c879f-6cwq8 1/1 Running 0 13m
    4. coredns-7ff77c879f-fvhqn 1/1 Running 0 13m
    5. etcd-master 1/1 Running 0 14m
    6. kube-apiserver-master 1/1 Running 0 14m
    7. kube-controller-manager-master 1/1 Running 0 14m
    8. kube-proxy-8dxzv 1/1 Running 0 13m
    9. kube-proxy-8sbbh 1/1 Running 0 13m
    10. kube-proxy-tcvzp 1/1 Running 0 13m
    11. kube-scheduler-master 1/1 Running 0 14m
    12. [root@master k8s]# kubectl get no
    13. NAME STATUS ROLES AGE VERSION
    14. master Ready master 15m v1.18.0
    15. node1 Ready <none> 14m v1.18.0
    16. node2 Ready <none> 14m v1.18.0

    可以看到pod都是running状态并且节点都是ready状态,此时k8s集群配置完成。

    本文参考:

    Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册_kubernetes部署验证-CSDN博客

  • 相关阅读:
    Spring让人眼前一亮的11个小技巧
    ruoyi-nbcio版本从RuoYi-Flowable-Plus迁移过程记录
    【Linux】Crontab、Shell、Linux、Git
    【Unity】填坑,Unity接入Epic Online Service上架Epic游戏商城
    【Windows日志】记录系统事件的日志
    Redis Stream 数据结构实现原理真的很强
    如何在麒麟上安装 ONLYOFFICE 桌面编辑器
    记一堂公开课《前端架构的设计与进化》思考总结
    HTML5期末大作业:HTML+CSS茶叶官网网页设计实例 企业网站制作
    算法学习笔记Day8——回溯算法
  • 原文地址:https://blog.csdn.net/m0_66570838/article/details/140846053