• 1-k8s1.23.6-底座搭建-基于docker


    一、服务器准备

    1. 服务器准备

      服务器名称服务器IP角色CPU(最低要求)内存(最低要求)
      master192.168.248.10master2核2G
      worker1192.168.248.11node2核2G
      worker2192.168.248.12node2核2G
    2. 修改ip:vi /etc/sysconfig/network-scripts/ifcfg-ens33

    3. 修改主机名:hostnamectl set-hostname master

    4. 修改主机名与ip映射:vi /etc/hosts

      192.168.248.10 master
      192.168.248.11 worker1
      192.168.248.12 worker2
      
      • 1
      • 2
      • 3
    5. 重置网络:service network restart

    6. 关闭防火墙:systemctl stop firewalld

    7. 禁用selinux

      [root@localhost ~]# setenforce 0 
      [root@localhost ~]# getenforce
      Permissive
      
      • 1
      • 2
      • 3

      ps:永久禁用方法(需重启服务器

      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
      
      • 1
    8. 关闭swap:swapoff -a

      ps1:swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。但是会对系统性能产生影响。所以这里需要关闭。如果不能关闭,则在需要修改集群的配置参数

      ps2:永久关闭方法,需重启服务器

      sed -ri 's/.*swap.*/#&/' /etc/fstab
      
      • 1
    9. 查看:free -m

      在这里插入图片描述

    10. bridged网桥设置

      1)概念:为了让服务器的iptables能发现bridged traffic,需要添加网桥过滤和地址转发功能

      2)新建modules-load.d/k8s.conf文件:vi /etc/modules-load.d/k8s.conf

      overlay
      br_netfilter
      
      • 1
      • 2

      3)新建sysctl.d/k8s.conf文件:vi /etc/sysctl.d/k8s.conf

      net.bridge.bridge-nf-call-ip6tables = 1
      net.ipv4.ip_forward                 = 1
      net.bridge.bridge-nf-call-iptables = 1
      
      • 1
      • 2
      • 3

      4)加载配置文件:sysctl --system

      5)加载br_netfilter网桥过滤模块 :modprobe br_netfilter

      6)加载网络虚拟化技术模块:modprobe overlay

      7)检验网桥过滤模块是否加载成功:lsmod | grep -e br_netfilter -e overlay
      在这里插入图片描述

    11. 配置IPVS

      1)概念:service有基于iptables和基于ipvs两种代理模型。基于ipvs的性能要高一些。需要手动载入才能使用ipvs模块

      2)安装ipset和ipvsadm:yum install ipset ipvsadm

      3)新建脚本文件:vi /etc/sysconfig/modules/ipvs.modules

      modprobe -- ip_vs
      modprobe -- ip_vs_rr
      modprobe -- ip_vs_wrr
      modprobe -- ip_vs_sh
      modprobe -- nf_conntrack_ipv4
      
      • 1
      • 2
      • 3
      • 4
      • 5

      4)添加执行权限给脚本文件,然后执行脚本文件

      chmod +x /etc/sysconfig/modules/ipvs.modules
      /bin/bash /etc/sysconfig/modules/ipvs.modules
      
      • 1
      • 2

      5)检验模块是否加载成功:lsmod | grep -e ip_vs -e nf_conntrack_ipv4
      在这里插入图片描述

    二、安装docker

    ps:三台服务器都装

    1. 下载:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

    2. 启动:systemctl start docker

    3. 设置开机自启动:systemctl enable docker

    4. 验证:docker images

    5. docker设置阿里云加速器和cgroup驱动程序:vi /etc/docker/daemon.json (没有的话,需要自己创建该文件)

      {
        "registry-mirrors": [
            "https://ustc-edu-cn.mirror.aliyuncs.com/",
            "https://hub-mirror.c.163.com",
            "https://mirror.baidubce.com",
            "https://bh9y01q2.mirror.aliyuncs.com"],
        "exec-opts": ["native.cgroupdriver=systemd"]
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      ps:endpoint = [“https://bh9y01q2.mirror.aliyuncs.com”],这个地址可以自己取阿里云注册使用

      1)登录阿里云:https://www.aliyun.com/

      2)获取平台分配的镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
      在这里插入图片描述
      在这里插入图片描述

    6. 重新导入配置:systemctl daemon-reload

    7. 重启:systemctl restart docker

    8. 查看是否配置成功:docker info

    在这里插入图片描述

    三、安装k8s

    ps:三台服务器都装

    1. 安装kubelet、kubeadm、kubectl

      1)添加yum源:vi /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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      2)下载:yum install -y --setopt=obsoletes=0 kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

      3)配置: systemctl enable kubelet --now

      4)相关概念

      1. obsoletes等于1表示更新旧的rpm包的同时会删除旧包,0表示更新旧的rpm包不会删除旧包
      2. kubelet启动后,可以用命令journalctl -f -u kubelet查看kubelet更详细的日志
      3. kubelet默认使用systemd作为cgroup driver
      4. 启动后,kubelet现在每隔几秒就会重启,因为它陷入了一个等待kubeadm指令的死循环
      
      • 1
      • 2
      • 3
      • 4
    2. 下载各个机器需要的镜像

      1)查看集群所需镜像的版本:kubeadm config images list

      2)创建文件夹:mkdir /opt/k8s

      3)创建文件:vi /opt/k8s/images.sh

      #!/bin/bash
      
      images=(
      kube-apiserver:v1.23.17
      kube-controller-manager:v1.23.17
      kube-scheduler:v1.23.17
      kube-proxy:v1.23.17
      pause:3.6
      etcd:3.5.1-0
      coredns:v1.8.6
      )
      for imageName in ${images[@]} ; do
      docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
      done
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      kube-apiserver:v1.24.0  #接口服务,给予rest风格开放k8s的接口服务
      kube-controller-manager:v1.24.0 #控制管理器,管理各个类型的控制器,针对k8s中的各个资源进行管理
      kube-scheduler:v1.24.0 #调度器,将pod根据一定的算法调用到合适的节点上
      kube-proxy:v1.24.0 #网络代理,负责service的服务发现负载均衡
      pause:3.7
      etcd:3.5.3-0 #理解为ks的数据库,键值类型存储的分布式数据库,提供了基于Raft算法实现自主的集群高可用。老版本:基于内存。新版本:持久化存储
      coredns:v1.8.6 #网络配置
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      4)赋权: chmod +x /opt/k8s/images.sh

      5)执行下载: /opt/k8s/images.sh

    3. 初始化主节点(只在master节点执行)

      kubeadm init --apiserver-advertise-address=192.168.248.10 --control-plane-endpoint=master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.169.0.0/16 
      
      • 1

      ps:–pod-network-cidr跟主机网络必须不同

      ps:将最后一段标黑的保存,后续使用

      在这里插入图片描述

      参数说明

      	  --apiserver-advertise-address string   设置 apiserver 绑定的 IP.
            --apiserver-bind-port int32            设置apiserver 监听的端口. (默认 6443)
            --apiserver-cert-extra-sans strings    api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。
            --cert-dir string                      证书存放的目录 (默认 "/etc/kubernetes/pki")
            --certificate-key string                kubeadm-cert secret 中 用于加密 control-plane 证书的key
            --config string                         kubeadm 配置文件的路径.
            --cri-socket string                    CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI  socket 或者 存在非标准 CRI socket 时才指定.
            --dry-run                              测试,并不真正执行;输出运行后的结果.
            --feature-gates string                 指定启用哪些额外的feature 使用 key=value 对的形式。
        	  --help  -h                             帮助文档
            --ignore-preflight-errors strings       忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
            --image-repository string              选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")
            --kubernetes-version string            选择K8S版本. (default "stable-1")
            --node-name string                     指定node的名称,默认使用 node 的 hostname.
            --pod-network-cidr string              指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络
            --service-cidr string                  指定service 的IP 范围. (default "10.96.0.0/12")
            --service-dns-domain string            指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")
            --skip-certificate-key-print            不打印 control-plane 用于加密证书的key.
            --skip-phases strings                  跳过指定的阶段(phase)
            --skip-token-print                     不打印 kubeadm init 生成的 default bootstrap token 
            --token string                         指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
            --token-ttl duration                   token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)
            --upload-certs                         上传 control-plane 证书到 kubeadm-certs Secret.
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23

      ps:如果想要回退,可执行以下指令

      kubeadm reset -f
      rm -rf /etc/kubernetes
      rm -rf /var/lib/etcd/
      rm -rf $HOME/.kube
      
      • 1
      • 2
      • 3
      • 4
    4. 查看状态:systemctl status kubelet

      在这里插入图片描述

      ps:如果报错,可以使用journalctl -xefu kubelet看下哪里的问题

    5. 设置.kube/config(只在master执行)

      1)mkdir -p $HOME/.kube

      2)cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

      3)chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

    6. 安装网络插件calico(只在master执行)

      1)切换目录:cd /opt/k8s

      2)下载:curl https://docs.projectcalico.org/archive/v3.19/manifests/calico.yaml -O

      3)修改内容,其中value为上一步的–pod-network-cidr的ip:vi /opt/k8s/calico.yaml

      - name: CALICO_IPV4POOL_CIDR
      value: "192.169.0.0/16"
      
      • 1
      • 2

      4)查看需要的镜像:cat calico.yaml | grep image

    在这里插入图片描述

    5)编辑镜像下载文件:vi /opt/calicoImages.sh

    #!/bin/bash
    
    images=(
    docker.io/calico/cni:v3.19.4
    docker.io/calico/pod2daemon-flexvol:v3.19.4
    docker.io/calico/node:v3.19.4
    docker.io/calico/kube-controllers:v3.19.4
    )
    for imageName in ${images[@]} ; do
    docker pull $imageName
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6)赋权:chmod +x /opt/calicoImages.sh

    7)执行:/opt/calicoImages.sh

    8)部署calico(只在master执行):kubectl apply -f calico.yaml

    9)此时查看master的状态:kubectl get pods -A

    在这里插入图片描述

    10)kubectl get nodes

    在这里插入图片描述

    1. 加入node节点

      1)执行:kubeadm join master:6443 --token x3mk8z.fzaqp9swqxl2o6r3 --discovery-token-ca-cert-hash sha256:f4ced0c25b14a796e02b3300b011f7ec8e120c01e95595d78b6d1b38b8805dfc

      2)令牌有效期24小时,可以在master节点生成新令牌命令: kubeadm token create --print-join-command

      3)查看master的状态:kubectl get pods -A

      在这里插入图片描述

      4)kubectl get nodes

      在这里插入图片描述

      5)拷贝主节点文件使node节点可以执行kubectl命令:scp -r H O M E / . k u b e w o r k e r 1 : HOME/.kube worker1: HOME/.kubeworker1:HOME

      ​ ps:拷贝完,自行在node节点测试kubectl命令

      6)将主节点中的/etc/kubernetes/admin.conf文件拷贝到从node节点相同目录下:scp /etc/kubernetes/admin.conf worker1:/etc/kubernetes

      7)导入环境

      echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
      source ~/.bash_profile
      
      • 1
      • 2

    四、安装部署dashboard

    ps:只在master执行

    1. dashboard和kubernetes的版本对应关系,参考:https://github.com/kubernetes/dashboard/blob/v2.5.1/go.mod

    2. 下载镜像

      1)切换目录:cd /opt/k8s

      2)下载:curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O

      3)创建资源:kubectl apply -f recommended.yaml

      ps:会下载kubernetesui/dashboard:v2.5.1、kubernetesui/metrics-scraper:v1.0.7两个镜像。也可以直接先下载镜像,避免等待

    3. 定时刷新查看进度:watch -n 3 kubectl get pods -A

      在这里插入图片描述

    4. 设置访问端口:kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

      将type: ClusterIP改为:type: NodePort
      添加 nodePort: 32414
      
      • 1
      • 2

    在这里插入图片描述

    1. 查看端口命令:kubectl get svc -A | grep kubernetes-dashboard

      在这里插入图片描述

    2. 访问dashborad页面:https://192.168.248.11:32414,如下所示

      在这里插入图片描述

    3. 获取普通用户token

      1)获取列表: kubectl get secrets -n kubernetes-dashboard

      2)获取密钥:kubectl describe secrets default-token-fjzh6 -n kubernetes-dashboard
      在这里插入图片描述

    4. 获取admin用户token

      1)创建访问账号:vi /opt/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

      2)应用: kubectl apply -f /opt/dash.yaml

      3)获取访问令牌: kubectl describe secrets admin-user-token-d8f7x -n kubernetes-dashboard
      在这里插入图片描述

    5. 将获取的token填入页面登录即可

      在这里插入图片描述

  • 相关阅读:
    十九、商城 - 运营商登录-Spring Security(7)
    C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
    【云原生之Docker实战】使用docker部署kodbox私有云
    电磁铁常见故障有哪些
    【面试题】面试官问你前端性能优化时,他想问什么?
    数据结构与算法笔记:基础篇 - 初始动态规划:如何巧妙解决“双十一”购物时的凑单问题?
    矩 阵 压 缩
    js非常常见的面试题
    【图文详解】深入理解线程和线程池
    Spring Boot 中使用 Swagger
  • 原文地址:https://blog.csdn.net/weixin_40496191/article/details/133856123