• 【云原生之K8s】Kubeadm搭建K8s



    在这里插入图片描述

    一、部署步骤

    在所有节点上安装Docker和kubeadm
    部署Kubenetes Master
    部署Kubenetes Node,将节点加入Kubenetes集群中
    部署Dashboard Web页面,可视化查看Kubenetes资源

    二、实验环境

    服务器IP地址
    master192.168.226.128
    node1192.168.226.129
    node2192.168.226.130

    1.所有节点关闭防火墙、selinux、swap交换分区

    #所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    swapoff -a		#交换分区必须要关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab	#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    2.将各节点的主机名与IP写入到三台服务器的hosts中

    cat >> /etc/hosts << EOF
    192.168.226.128 master
    192.168.226.129 node1
    192.168.226.130 node2
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    3.调成内核参数

    将桥接得IPV4流量传递到iptables链(三台都执行)

    #调整内核参数
     
    cat > /etc/sysctl.d/kubernetes.conf << EOF
    #开启网桥模式,可将网桥的流量传递给iptables链
    net.bridge.bridge-nf-call-ip6tables=1
    net.bridge.bridge-nf-call-iptables=1
    #关闭ipv6协议
    net.ipv6.conf.all.disable_ipv6=1
    net.ipv4.ip_forward=1
    EOF
     
    #加载参数
    sysctl --system  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    4.所有节点安装Docker

    yum install -y yum-utils device-mapper-persistent-data lvm2 
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    yum install -y docker-ce docker-ce-cli containerd.io
     
    mkdir /etc/docker
    cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      }
    }
    EOF
    #使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
    #日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
     
    systemctl daemon-reload
    systemctl restart docker.service
    systemctl enable docker.service 
     
    docker info | grep "Cgroup Driver"
    Cgroup Driver: system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    5.所有节点配置K8s

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

    在这里插入图片描述

    6.所有节点安装kubeadm、kubelet和kubectl

    yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
     
    #开机自启kubelet
    systemctl enable kubelet.service
    systemctl start kubelet
    #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述

    7.部署kubenetes master节点(192.168.226.128)

    kubeadm init \
    --apiserver-advertise-address=192.168.226.128 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.21.3 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    参数说明

    kubeadm init \
    --apiserver-advertise-address=192.168.226.128 \                  #指定master监听的地址,修改为自己的master地址
    --image-repository registry.aliyuncs.com/google_containers \   #指定为aliyun的下载源
    --kubernetes-version v1.18.0 \                 #指定k8s版本,1.18.0版本比较稳定
    --service-cidr=10.96.0.0/12 \                  #设置集群内部的网络
    --pod-network-cidr=10.244.0.0/16                #设置pod的网络
    # service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述
    执行以下命令可使用kubectl管理工具

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

    在这里插入图片描述

    8.token制作

    node节点加入集群需要生成的token,token有效期为24消失,过期需要重新创建,创建命令为:

    kubeadm token create --print-join-command
    
    • 1

    在这里插入图片描述

    9.K8s-node节点加入master节点(两个node节点执行)

    获取前面创建好的token令牌
    kubeadm join 192.168.226.128:6443 --token 36if93.fzs70jlwgto49n7m --discovery-token-ca-cert-hash sha256:2d5ce699d47cb3109b414bfd617007422c9528cbb0a17972599d350312a069eb
    
    • 1
    • 2

    在这里插入图片描述
    主节点查看

    kubectl get node
    
    • 1

    在这里插入图片描述
    节点显示NotReady状态,需要安装网络插件

    token 过期重新生成 token
    kubeadm token create --print-join-command

    10.master节点安装部署pod网络插件(flannel)

    下载插件yaml插件

    #github仓库下载
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    #国内站点下载证书
    wget http://120.78.77.38/file/kube-flannel.yaml
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在这里插入图片描述

    #安装
    kubectl apply -f kube-flannel.yml
    
    • 1
    • 2

    在这里插入图片描述

    kubectl get node      #查看node状态
    
    • 1

    在这里插入图片描述

    kubectl get pods -A
    
    • 1

    在这里插入图片描述

    11.给node节点添加标签

    kubectl label node node1 node-role.kubernetes.io/node=node1
    kubectl label node node2 node-role.kubernetes.io/node=node2
    #获取节点信息
    kubectl get nodes
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    12.master检查

    #查询master是否正常 
    kubectl get cs 
    #若为unhealthy 
    vim /etc/kubernetes/manifests/kube-scheduler.yaml 
    vim /etc/kubernetes/manifests/kube-controller-manager.yaml
     #将- --port=0注释掉
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    13.再次查询服务是否正常

    #查询所有pod是否正常运行 
    kubectl get pods -A 
    #查询master是否正常 
    kubectl get cs 
    #查询node节点是否ready 
    kubectl get nodes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    14.测试K8s集群,在集群中创建pod,验证是否能正常运行

    #部署服务
    kubectl create deployment nginx --image=nginx
    #暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get pods
    kubectl get svc(service)
    #删除pod与svc
    kubectl delete deploy/nginx
    kubectl delete svc/nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    测试一下,master和node都能通过自己的IP的31757端口去访问

    master节点
    在这里插入图片描述
    node1节点
    在这里插入图片描述

    node2节点
    在这里插入图片描述


  • 相关阅读:
    零基础学Python--机器学习(四):特征提取
    【docker容器 redis密码没有生效解决办法】
    苹果Mac优化清理工具CleanMyMac X2023版本
    易用性测试
    【JavaScript-27】js的内置对象Date,获取当前时间戳,倒计时案例(附最后)
    历法、节日、节气
    分片上传简单实现重点是Promise的运用
    go - flag包(处理命令行参数小能手)
    直接用sql语句来查询和分析excel表,不需要导数据,提供了sql语句自动生成,不会sql也能用
    Go——下划线
  • 原文地址:https://blog.csdn.net/S314118142/article/details/127639553