• k8s集群搭建操作步骤


    1、k8s的部署方式:

    目前生产部署Kubernetes集群主要有kubeadm和二进制包两种方式

    Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

    二进制包,从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

    此处采用kubeadm的方式搭建集群。

    2、环境准备

    Linux虚拟机克隆3台,建议最小配置:2核CPU、2G内存、20G硬盘
    服务器可以访问外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入各个节点,安装好docker。
    服务器规划:

    k8smaster:192.168.43.60
    k8snode1:192.168.43.61
    k8snode2:192.168.43.62

    3、初始化配置

    3.1、安装环境准备

    注意:下面的操作需要在所有的节点上执行。

    # 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭selinux
    setenforce 0  # 临时
    sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
    
    
    # 关闭swap
    swapoff -a  # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
    
    # 此处采用永久关闭,关闭完swap后,重启一下虚拟机!!!
    
    # 根据规划设置主机名
    hostnamectl set-hostname 
    
    # 在master添加hosts
    cat >> /etc/hosts << EOF
    192.168.43.60 k8smaster
    192.168.43.61 k8snode1
    192.168.43.62 k8snode2
    EOF
    
    # 将桥接的IPv4流量传递到iptables的链
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system  # 生效
    
    # 时间同步
    yum install ntpdate -y
    ntpdate time.windows.com
    
    注意:虚拟机不管关机还是挂起,每次重新操作都需要更新时间进行同步。 
    
    
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    3.2 修改docker配置文件

    配置镜像下载加速器:

      {
      "registry-mirrors": ["https://6i5uqmsz.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"} 
    }
    
    # 重启
    systemctl restart docker
    docker info   
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    添加阿里云软件源:

    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

    4、安装部署k8s

    #如果之前安装过k8s,先卸载旧版本
    yum remove ‐y kubelet kubeadm kubectl
    # 查看可以安装的版本
    yum list kubelet --showduplicates | sort -r
    # 安装
    yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
    #  启动
    systemctl enable kubelet & systemctl start kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.1 kubeadm部署

    部署k8smaster【只在master执行】,需要等上一会,需要下载很多的镜像

    kubeadm init \
      --apiserver-advertise-address=192.168.43.60 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.23.0 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --ignore-preflight-errors=all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    命令解释:

    --apiserver-advertise-address 集群通告地址
    --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
    --kubernetes-version K8s版本,与上面安装的一致
    --service-cidr 集群内部虚拟网络,Pod统一访问入口
    --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置k8s的node节点

    在node节点操作,向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
    在这里插入图片描述

    默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

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

    4.2 部署容器网络

    在master执行,Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。

    下载YAML:

    curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O
    
    • 1

    下载完成直接运行

    kubectl apply -f calico.yaml
    kubectl get pods -n kube-system  
    
    • 1
    • 2

    5、部署Dashboard

    Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

    YAML下载地址:

     wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
    
    • 1

    有时候网络问题,可能需要执行多次。

    默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:vi recommended.yaml

    ...
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 30001
      selector:
        k8s-app: kubernetes-dashboard
      type: NodePort
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    此处指定了nodePort为30001,也可以不指定,使用默认的端口修改完成后,执行命令:

    kubectl apply -f recommended.yaml
    kubectl get pods -n kubernetes-dashboard
    
    • 1
    • 2

    然后可以访问ui界面

    https://192.168.43.60:30001/

    提示需要登录,使用token登录

    创建service account并绑定默认cluster-admin管理员集群角色:

     # 创建用户
    kubectl create serviceaccount dashboard-admin -n kube-system
    # 用户授权
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    # 获取用户Token
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6、helm安装使用

    Helm是一个kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。

    网上看了很多helm的安装教程,都是helm v2老版安装,还需要安装tiller客户端。在helm更新到v3以后,其删除了tiller客户端;release可以在不同命名空间重用;可将chart推送到docker仓库。

    (1)创建如下路径的Helm文件夹并进入
    mkdir -p /root/kubernetes/Helm   &&  cd /root/kubernetes/Helm  
    (2)下载获取helm,这里我选择3.3版本
    wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
    (3)解压文件
    tar -zxvf helm-v3.3.4-linux-amd64.tar.gz
    (4)进入linux-amd64中移动其中helm二进制文件到/usr/local/bin/helm中
    mv linux-amd64/helm /usr/local/bin/helm
    (5)查看版本
    helm version
    (6)添加微软的库
    helm repo add stable http://mirror.azure.cn/kubernetes/charts
    (7)更新仓库  
    helm repo update
    (8)查看helm仓库
    helm repo list
    (9)helm创建
    helm create mycharts
    (10)helm查看
    hlem ls
    (11)helm运行命令
    #说明 releaseName为Release名称,一般和chart包名称保持一致;namespaceName为命名空间;chartDirName是chart目录文件夹
    
    格式:helm install $releaseName -n $namespaceName $chartDirName
    示例:helm install mychartsr -n mynamespace ./mychartsr
    (12) 卸载
    格式:helm uninstall $releaseName -n $namespaceName
    示例:helm uninstall mycharts -n mynamespace
    
    
    
    • 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
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    javamd5加密解密
    java常用的几个图片处理工具对Tiff文件的支持
    2023山东科技大学考研介绍
    添砖Java之路(其六)——通过集合制作的学生信息管理系统
    C#实现线性查找算法
    前端开发面试题自测
    微软云计算Windows Azure(二)
    网络原理 - HTTP/HTTPS(3)
    达梦数据库基础操作(一):用户操作
    3分钟基于Chat GPT完成工作中的小程序
  • 原文地址:https://blog.csdn.net/qq_44779847/article/details/127766656