• MacOS M1芯片CentOS8部署搭建k8s集群


    一、简介

    MacOS M1芯片

    VMWare Fusion

    服务器信息:

    hostname系统版本IP内存CPU硬盘
    node01-masterCentOS 8192.168.153.1282G2C30G
    node02CentOS 8192.168.153.1292G2C30G
    node03CentOS 8192.168.153.1302G2C30G
    # 查看系统版本
    cat /etc/centos-release
    # 查看内核版本
    uname -sr
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    二、基础环境设置

    以下操作需要在每个节点都执行。

    2.1 设置hostname

    #使用 hostnamectl set-hostname设置主机名
    hostnamectl set-hostname node01-master
    
    
    vi /etc/hosts  # 编辑hosts文件,配置域名映射
    192.168.153.128  node01-master
    192.168.153.129  node02
    192.168.153.130  node03
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    2.2 关闭防火墙

    # 关闭防火墙
    systemctl stop firewalld
    # 关闭开机自启
    systemctl disable firewalld
    # 查看防火墙状态
    firewall-cmd --state
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2.3 关闭selinux

    #将 SELinux 设置为 permissive 模式(相当于将其禁用)
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
    • 1
    • 2
    • 3

    2.4 关闭swap

    swapoff -a  # 临时关闭,主机重启后k8s无法自动重启,需要重新关闭swap
    vim /etc/fstab  # 永久关闭
    
    • 1
    • 2

    在这里插入图片描述

    2.5 允许 iptables 检查桥接流量

    cat <| sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    
    cat <| sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    sudo sysctl --system
    
    • 1

    三、部署Docker环境

    Docker环境也需要在每个节点部署。

    3.1 下载docker

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    yum -y install docker-ce
    
    systemctl enable docker && systemctl start docker
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 配置镜像加速

    另外k8s 1.2版本以上需要修改native.cgroupdriver=systemd

    sudo mkdir -p /etc/docker
    
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://iedolof4.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    
    
    sudo systemctl daemon-reload
    
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Docker安装完成,使用docker info 或者 docker version 命令进行验证:

    在这里插入图片描述

    四、部署k8s集群

    4.1 在所有节点安装kubeadm、kubelet、kubectl

    在所有节点执行:

    添加阿里的yum软件源,注意baseurl的地址是否是你虚拟机对应的版本

    #添加阿里的yum软件源,这里需要注意baseurl的地址是否是你虚拟机对应的版本
    # 以下为mac m1 CentOS8 对应的地址
    cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
    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
    • 11

    网上有的文章在添加aliyum源的时候使用的是kubernetes-el7-x86_64:(注意区分)

    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

    http://mirrors.aliyun.com/kubernetes/yum/repos/?spm=a2c6h.25603864.0.0.3e92274fROyPdV

    在所有节点执行:
    安装kubeadm、kubelet、kubectl

    #安装k8s(注意版本号,后面的版本需要对应)
    yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
    systemctl enable kubelet
    
    • 1
    • 2
    • 3

    4.2 在master节点执行kubeadm初始化

    仅在master节点执行:
    kubeadm初始化

    kubeadm init \
          --apiserver-advertise-address=192.168.153.128 \
          --image-repository registry.aliyuncs.com/google_containers \
          --kubernetes-version v1.21.0 \
          --service-cidr=10.96.0.0/12 \
          --pod-network-cidr=10.244.0.0/16 \
          --ignore-preflight-errors=all
          
    #-–apiserver-advertise-address 集群通告地址(master内网) 注意修改为master节点的address
    #–-image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
    #–-kubernetes-version K8s版本,与上面安装的一致
    #–-service-cidr 集群内部虚拟网络,Pod统一访问入口
    #-–pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    
    Your Kubernetes control-plane has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.153.128:6443 --token ms6617.5hbjusrd37ovnbh1 \
            --discovery-token-ca-cert-hash sha256:1161e6266f482d5fdf436aa115a941657a2aee5ff0cc739d8c58adfc6a8441fb 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    按照安装完成的命令执行。
    在master节点执行:

    # 在主节点执行
     mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    #如果是root用户
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.3 加入master节点

    node02node03节点执行以下命令加入master节点:

    kubeadm join 192.168.153.128:6443 --token ms6617.5hbjusrd37ovnbh1 \
            --discovery-token-ca-cert-hash sha256:1161e6266f482d5fdf436aa115a941657a2aee5ff0cc739d8c58adfc6a8441fb 
    
    • 1
    • 2

    token有效期为24小时,如果过期,需要重新创建token:

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

    使用kubectl get nodes或者kubectl get nodes -owide命令进行验证:
    在这里插入图片描述

    4.4 部署calico

    在master节点执行:

    wget https://docs.projectcalico.org/manifests/calico.yaml
    kubectl apply -f calico.yaml
    # 查看运行状态
    kubectl get pods -n kube-system
    
    • 1
    • 2
    • 3
    • 4

    可能会出现卡在ImagePullBackOff或者创建容器等不成功的状态,都有可能是因为镜像没有下载来。

    #可以使用kubectl describe pod -n kube-system podname 命令查看容器运行情况,如果是因为镜像下载失败,可以对应的集群节点使用docker pull命令将镜像下载下来
    kubectl describe pod -n kube-system calico-kube-controllers-58f755f869-tjsb4
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    node03节点执行docker pull calico/kube-controllers:v3.23.3命令,下载镜像。

    在这里插入图片描述

    在这里插入图片描述

    五、部署Dashboard可视化界面

    kubernetes官方提供的可视化界面:https://github.com/kubernetes/dashboard

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
    
    
    • 1
    • 2
    kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
    #type: ClusterIP 改为 type: NodePort
    
    • 1
    • 2

    在这里插入图片描述

    kubectl get svc -A |grep kubernetes-dashboard
    
    • 1

    在这里插入图片描述
    浏览器访问:https://集群任意IP:端口

    https://192.168.153.129:32184/
    注意是https协议。
    如果是http协议会出现以下情况:
    在这里插入图片描述

    使用https协议打开出现以下页面:

    在这里插入图片描述

    键盘输入:thisisunsafe,页面即可显示登录页面:
    在这里插入图片描述

    然后创建访问账号:

    #创建访问账号,准备一个yaml文件; vi dashaccount.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 dashaccount.yaml 命令进行部署。
    执行一下命令获得登录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

    在这里插入图片描述

    输入token登录成功:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    附录

    k8s常用命令

    # 查看所有节点		
    kubectl get nodes 		
    
    #查看集群服务器信息
    kubectl get nodes -o wide	
    	
    # 查看kube-system命名空间下的pod
    kubectl get pods -n kube-system
    
    #部署资源
    kubectl apply -f calico.yaml
    
    #删除部署
    kubectl delete -f calico.yaml
    
    #强制删除pod 命名空间为kube-system pod为name为coredns-545d6fc579-s2j64 
    kubectl delete pod coredns-545d6fc579-s2j64 -n kube-system --grace-period=0 --force  
    
    #查看所有名称空间  namespace简称ns
    kubectl get ns    	
    
    #创建名称空间						  
    kubectl create ns 名称空间	
    
    #删除名称空间			
    kubectl delete ns 名称空间		
    
    #查看默认default名称空间下的应用				
    kubectl get pods			
    
    #监控查看Pod
    kubectl get pod -w		
    
    #监控查看Pod				
    watch -n 1 kubectl get pods	 	
    
    #查看所有应用	
    kubectl get pods -A 		
    
    #查看该名称空间下的应用				
    kubectl get pods -n 名称空间
    
    #查看默认名称空间下更详细的应用信息 			
    kubectl get pod -owide     				
    
    # 查看所有pod使用的内存 
    kubectl top pod -A 
    
    #查看容器描述   默认是default命名空间
    kubectl describe pod myk8snginx  
    
    kubectl describe pod -n ruoyi-cloud ry-cloud-mysql-0
    
    # 查看Pod运行日志
    kubectl logs mynginx			
    
    #进入容器		
    kubectl exec -it mynginx -- /bin/bash	
    kubectl exec -it redis -- redis-cli
    
    • 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
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    公众号关注

    在这里插入图片描述

  • 相关阅读:
    新旧电脑间文件互传(通过网络)
    位置编码器
    应用宝应用认领签名指令
    科技资讯|苹果新款手机支持 4.5W 反向充电,耳机手表不怕没电
    Jupyter Notebook修改默认浏览器方法
    Linux操作系统(一)系统初始化
    看DevExtreme如何用HTML/Markdown编辑器轻松设置多行工具栏
    FPGA实现平衡小车(文末开源!!)
    分布式复制系统设计-总结
    类欧笔记存档
  • 原文地址:https://blog.csdn.net/DreamsArchitects/article/details/126275156