• Kubernetes 集群环境搭建


    Kubernetes

    2. 集群环境搭建(老师:黑马程序员)

    Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)

    2.1 环境规划

    2.1.1 集群类型

    kubernetes集群大体上分为两类:一主多从多主多从

    • 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
    • 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境

    本次学习采用 一主两从 类型的集群

    2.1.2 安装方式

    kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

    • minikube:一个用于快速搭建单节点kubernetes的工具
    • kubeadm:一个用于快速搭建kubernetes集群的工具【*】
    • 二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效
    2.1.3 主机规划

    使用昨天在阿里云送的一个月体验的服务器

    先将实例东西全部清空

    在这里插入图片描述

    在这里插入图片描述

    将三台服务器重新安装操作系统

    在这里插入图片描述

    在这里插入图片描述

    作用IP操作系统配置
    Master172.29.214.122(私网ip)centos7.51核(vCPU) 2 GiB
    Node1172.29.214.123(私网ip)centos7.51核(vCPU) 2 GiB
    Node2172.29.214.124(私网ip)centos7.51核(vCPU) 2 GiB

    2.2 环境搭建

    本次环境搭建需要安装三台Centos服务器(一主二从),然后在每台服务器中分别安装docker(18.06.3),kubeadm(1.17.4)、kubelet(1.17.4)、kubectl(1.17.4)程序。

    2.2.1 环境初始化(三台一起)

    在这里插入图片描述

    • 检查操作系统的版本

      在这里插入图片描述

    • 检查网络,互ping

      通过私网ip都能确保相通

      在这里插入图片描述

    • 配置解析主机名

      在这里插入图片描述

      在这里插入图片描述

      这样就可以直接ping名字了→ 方便

    • 时间同步

      kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。

      在这里插入图片描述

    • 禁用iptables和防火墙服务

      kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

      在这里插入图片描述

    • 禁用selinux

      在这里插入图片描述

    • 禁用swap分区

      swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备。但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

      在这里插入图片描述

      没有不管

    • 修改Linux的内核参数

      编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:

      在这里插入图片描述

      在这里插入图片描述

    • 配置ipvs功能

      在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的。两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

      # 1 安装ipset和ipvsadm
      [root@master ~]# yum install ipset ipvsadmin -y
      
      # 2 添加需要加载的模块写入脚本文件
      [root@master ~]# cat <  /etc/sysconfig/modules/ipvs.modules
      #!/bin/bash
      modprobe -- ip_vs
      modprobe -- ip_vs_rr
      modprobe -- ip_vs_wrr
      modprobe -- ip_vs_sh
      modprobe -- nf_conntrack_ipv4
      EOF
      
      # 3 为脚本文件添加执行权限
      [root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
      
      # 4 执行脚本文件
      [root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
      
      # 5 查看对应的模块是否加载成功
      [root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21

      在这里插入图片描述

      在这里插入图片描述

    • reboot重启

    在这里插入图片描述

    在这里插入图片描述

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

    切换镜像源

    在这里插入图片描述

    查看支持docker版本

    在这里插入图片描述

    安装特定版本的docker-ce
    在这里插入图片描述

    添加配置文件

    在这里插入图片描述

    检查一下

    在这里插入图片描述

    启动docker

    在这里插入图片描述

    检查docker状态和版本
    在这里插入图片描述

    2.2.3 安装kubernetes组件
    # 由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
    # 编辑/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
    
    # 安装kubeadm、kubelet和kubectl
    [root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
    
    # 配置kubelet的cgroup
    # 编辑/etc/sysconfig/kubelet,添加下面的配置
    KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
    KUBE_PROXY_MODE="ipvs"
    
    # 4 设置kubelet开机自启
    [root@master ~]# systemctl enable kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    设置镜像源配置

    在这里插入图片描述

    安装kubeadm、kubelet和kubectl

    在这里插入图片描述

    配置kubelet的cgroup

    在这里插入图片描述

    设置kubelet开机自启

    在这里插入图片描述

    2.2.4 准备集群镜像
    # 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
    [root@master ~]# kubeadm config images list
    
    # 下载镜像
    # 此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案
    images=(
        kube-apiserver:v1.17.4
        kube-controller-manager:v1.17.4
        kube-scheduler:v1.17.4
        kube-proxy:v1.17.4
        pause:3.1
        etcd:3.4.3-0
        coredns:1.6.5
    )
    
    for imageName in ${images[@]} ; do
    	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 		k8s.gcr.io/$imageName
    	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    在这里插入图片描述

    查看镜像

    在这里插入图片描述

    2.2.5 集群初始化

    master节点操作

    # 创建集群
    [root@master ~]# kubeadm init --kubernetes-version=v1.17.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=172.29.214.122   //这个更改成我自己的私网ip
    
    # 创建必要文件
    [root@master ~]# mkdir -p $HOME/.kube
    [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行第一个命令时报错了

    the number of available CPUs 1 is less than the required 2 [preflight] If you know what you are doin
    
    • 1

    CPU至少要两个

    难道学习就此终止???

    不,我要更改实例规格

    在这里插入图片描述

    我超

    在这里插入图片描述

    不知道会不会扣钱

    启动实例

    再试一次

    在这里插入图片描述

    镜像还在

    在这里插入图片描述

    成功了

    创建必要文件

    在这里插入图片描述

    node节点操作

    # 将node节点加入集群
    [root@master ~]# kubeadm join 192.168.109.100:6443 \ 
    	--token 8507uc.o0knircuri8etnw2 \
    	--discovery-token-ca-cert-hash \
    	sha256:acc37967fb5b0acf39d7598f8a439cc7dc88f439a3f4d0c9cae88e7901b9d3f
    	
    	
    kubeadm join 172.29.214.122:6443 --token 43i5bk.lgrcbqj491y58jqq --discovery-token-ca-cert-hash sha256:a9701c534f34c335ff1c1eba5e5e150a91de49cad38912d	
    
    	
    # 查看集群状态 此时的集群状态为NotReady,这是因为还没有配置网络插件
    [root@master ~]# kubectl get nodes
    NAME     STATUS     ROLES    AGE     VERSION
    master   NotReady   master   6m43s   v1.17.4
    node1    NotReady   <none>   22s     v1.17.4
    node2    NotReady   <none>   19s     v1.17.4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    以上命令配置命令为黑马老师机器上的命令

    在这里插入图片描述

    加入集群,用自己系统生成的

    在这里插入图片描述

    在这里插入图片描述

    可以发现,已经加入成功

    同理,将node2也加入

    在这里插入图片描述

    同样的命令,在node2上报错了

    在这里插入图片描述

    重新生成了一个令牌,再试一次

    在这里插入图片描述

    完成

    2.2.6 安装网络插件

    kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel

    在master节点执行

    # 获取fannel的配置文件
    [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 修改文件中quay.io仓库为quay-mirror.qiniu.com
    
    # 使用配置文件启动fannel
    [root@master ~]# kubectl apply -f kube-flannel.yml
    
    # 稍等片刻,再次查看集群节点的状态
    [root@master ~]# kubectl get nodes
    NAME     STATUS   ROLES    AGE     VERSION
    master   Ready    master   15m     v1.17.4
    node1    Ready    <none>   8m53s   v1.17.4
    node2    Ready    <none>   8m50s   v1.17.4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    将配置文件放至root目录下

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    再次查看集群节点状态

    在这里插入图片描述

    又出问题了,一直不准备

    ---------重装系统了,历经…又来到这一步

    在这里插入图片描述

    https://blog.csdn.net/bh451326803/article/details/125263918

    这里参考了这一位博主给的文件

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    成功就绪了,我真的会泪目!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    至此,kubernetes的集群环境搭建完成

    2.3 服务部署

    在kubernetes集群中部署一个nginx程序,测试下集群是否在正常工作。

    # 部署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,service
    NAME                         READY   STATUS    RESTARTS   AGE
    pod/nginx-86c57db685-fdc2k   1/1     Running   0          18m
    
    NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        82m
    service/nginx        NodePort    10.104.121.45   <none>        80:30073/TCP   17m
    
    # 4 最后在电脑上访问下部署的nginx服务
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    访问一下

    在这里插入图片描述
    泪目!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 相关阅读:
    注册大量短视频矩阵账号很简单,这个方法教会你,还有这个批量剪辑神器帮你完成矩阵分发
    (附源码)spring boot分布式文件系统 毕业设计 182251
    odoo javascript参考(五)
    转介绍录入问题
    2022年9月总结
    Go 字符串类型的实现原理
    【Harmony OS】【ARK UI】公共事件模块
    Fragment 这些 API 已废弃,你还在使用吗?
    2022暑假牛客多校1 (A/G/D/I)
    RestTemplate源码解析
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/125880333