• K8S环境搭建


    K8S环境搭建

    前置条件
    • 部署3台VM,一台作为master,两台作为slave
    • 需要保障vm之间网络是互通的

    vm安装docker

    # 安装/更新 yum-utils
    yum install -y yum-utils
    
    #添加阿里镜像稳定版仓库
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    #安装最新版docker
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
    #安装完成后启动docker
    sudo systemctl start docker
    
    #检查docker运行状态
    sudo service docker status
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    配置docker镜像加速

    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]//修改为你自己的镜像加速地址
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看加速是否配置成功

    sudo docker info
    
    • 1

    在这里插入图片描述

    关闭交换区

    # 查看 交换分区
    free -m
    
    # 将 SELinux 设置为 permissive 模式(相当于将其禁用)  第一行是临时禁用,第二行是永久禁用
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
    # 关闭swap;第一行是临时禁用,第二行是永久禁用
    swapoff -a  
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    # 允许 iptables 检查桥接流量 (K8s 官方要求)
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    # 让配置生效
    sysctl --system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    # 禁用 selinux
    vim /etc/selinux/config
    SELINUX=disabled
    
    # 关闭swap
    swapoff -a  # 临时
    vim /etc/fstab  # 永久
    # 注释下面这行
    #/dev/mapper/centos-swap swap                    swap    defaults        0 0
    
    # 查看是否成功
    free -m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    安装K8S三大件

    安装 kubelet、kebeadm、kubectl

    # 配置 k8s 的 yum 源地址
    cat <<EOF | sudo tee /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # 安装 kubelet、kubeadm、kubectl
    yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
    
    # 启动kubelet
    systemctl enable --now kubelet
    
    # 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
    systemctl status kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    在这里插入图片描述

    下载master节点组件

    # 配置镜像,生成 images.sh
    sudo tee ./images.sh <<-'EOF'
    #!/bin/bash
    images=(
    kube-apiserver:v1.20.9
    kube-proxy:v1.20.9
    kube-controller-manager:v1.20.9
    kube-scheduler:v1.20.9
    coredns:1.7.0
    etcd:3.4.13-0
    pause:3.2
    )
    for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
    done
    EOF
    
    # 拉取镜像
    chmod +x ./images.sh && ./images.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 建议为三台机器同时安装,不用区分对待,如需单独下载可以使用如下命令
    docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-proxy:v1.20.9
    
    • 1

    在这里插入图片描述

    初始化主节点

    # 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
    # 访问 cluster-endpoint 即 访问 172.31.0.4
    echo "10.187.99.123 cluster-endpoint" >> /etc/hosts
    
    # 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
    # --apiserver-advertise-address: master 的 IP
    # --control-plane-endpoint: master 的域名
    # --service-cidr 和 --pod-network-cidr 是网络范围,建议不要改。要改的话 2 个cidr 和 vps(172.31.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
    kubeadm init \
    --apiserver-advertise-address=10.187.99.123 \
    --control-plane-endpoint=cluster-endpoint \
    --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
    --kubernetes-version v1.20.9 \
    --service-cidr=10.96.0.0/16 \
    --pod-network-cidr=192.168.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    安装网络插件calico

    # 下载配置文件
    curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
    # 加载配置
    kubectl apply -f calico.yaml 
    
    • 1
    • 2
    • 3
    • 4

    生成新令牌

    kubeadm token create --print-join-command
    
    • 1
    部署dashboard

    kubernetes官方提供的可视化界面

    https://github.com/kubernetes/dashboard

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
    
    • 1

    设置访问端口

    kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
    
    • 1
    • type: ClusterIP 改为 type: NodePort
    kubectl get svc -A |grep kubernetes-dashboard
    ## 找到端口,在安全组放行
    
    • 1
    • 2

    访问: https://集群任意IP:端口 https://139.198.165.238:32759

    创建访问账号

    #创建访问账号,准备一个yaml文件; vi dash.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    kubectl apply -f dash.yaml
    
    • 1

    获取token

    #获取访问令牌
    kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
    
    • 1
    • 2

    遇到浏览器无法访问,按照以步骤处理

    • 在master节点创建存放证书目录

      mkdir /root/key && cd /root/key
      
      • 1
    • 在master节点生成证书

      openssl genrsa -out dashboard.key 2048 
      openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.1.31'
      openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
      
      • 1
      • 2
      • 3
    • 在master节点删除原来的证书

      kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
      
      • 1
    • 在master节点创建新的证书

      kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
      
      • 1
    • 在master节点查看pod

      kubectl get pod -n kubernetes-dashboard
      
      • 1
    • 在master节点删除pod,使其重新创建

      kubectl delete  pod kubernetes-dashboard-85f59f8ff7-zhbsd  -n kubernetes-dashboard
      
      • 1
    • 在master节点等待pod重新起来进行测试,观察到正常

    在这里插入图片描述

  • 相关阅读:
    SpringCloud——消息总线——Bus
    分布式id解决方案
    使用Nginx后如何在web应用中获取用户ip及原理解释
    Matter 研讨会回顾(第二期)|乐鑫 Matter SDK 开发平台介绍和使用
    Vue2.0源码理解(4) - 合并配置
    JavaScript 文件优化指南
    [Spring Cloud] gateway全局异常捕捉统一返回值
    uniapp 复选框样式 修改
    解锁工业 4.0 元宇宙:AR/VR、AI 和 3D 技术如何为下一次工业革命提供动力
    训练数据不够怎么造?yolo5 最有用的trick 之数据增强详解
  • 原文地址:https://blog.csdn.net/qq_52751442/article/details/133816209