归云
归云
Published on 2021-05-15 / 2,846 Visits
0
0

K8S笔记(二)

  • K8S环境搭建平台规划

    • 单master集群
      • 我的理解就类似与微服务中的单注册中心
    • 多master集群
      • 我的理解就类似与微服务中的多注册中心
  • 部署前置要求

    • 一台Linux 主机

    • 每台机器 2 GB 或更多的 RAM

    • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)

    • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见了解更多详细信息

      • 你可以使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址
      • 可以使用 cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
    • 开启机器上的某些端口

      • master所需端口

        协议方向端口范围作用使用者
        TCP入站6443Kubernetes API 服务器所有组件
        TCP入站2379-2380etcd 服务器客户端 APIkube-apiserver, etcd
        TCP入站10250Kubelet APIkubelet 自身、控制平面组件
        TCP入站10251kube-schedulerkube-scheduler 自身
        TCP入站10252kube-controller-managerkube-controller-manager 自身
      • node 所需端口

        协议方向端口范围作用使用者
        TCP入站10250Kubelet APIkubelet 自身、控制平面组件
        TCP入站30000-32767NodePort 服务†所有组件
    • 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区

      • 临时禁用交换分区

         swapoff -a #禁止命令
        
      • 永久禁用交换分区

        • 把根目录文件系统设为可读写
        mount -n -o remount,rw /
        
        • 编辑/etc/fstab, 在swap分区这行前加 # 禁用掉,例如
        #
        # /etc/fstab
        # Created by anaconda on Thu Apr 15 19:10:57 2021
        #
        # Accessible filesystems, by reference, are maintained under '/dev/disk'
        # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
        #
        /dev/mapper/centos-root /                       xfs     defaults        0 0
        UUID=31abd679-6c80-4940-bde6-83a2afe8db30 /boot                   xfs     defaults        0 0
        /dev/mapper/centos-home /home                   xfs     defaults        0 0
        # /dev/mapper/centos-swap swap                    swap    defaults        0 0
        
        • 重启服务器

          reboot
          
  • 部署方式

    • kubeadm
      • 快速部署,方便
    • 二进制包
      • 需要手动部署,比较麻烦
  • kubeadm方式部署(例子为Debian系统)

    • 安装 runtime

    • 安装使用 Kubernetes apt 仓库所需要的包

      apt-get update
      apt-get install -y apt-transport-https ca-certificates curl
      
    • 下载 Google Cloud 公开签名秘钥,我这里用的阿里镜像的签名秘钥

      curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
      
    • 添加 Kubernetes apt 仓库

      echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
      " |  tee /etc/apt/sources.list.d/kubernetes.list
      
    • 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本

      apt-get update
      apt-get install -y kubelet kubeadm kubectl
      
    • 截止今天为止,最新版的Kubernetes版本为1.21而阿里云的镜像未同步到1.21,这里只好把Kubernetes版本降到1.20

      apt-get update
      apt-get install -y kubelet=1.20.6-00 kubeadm=1.20.6-00 kubectl=1.20.6-00
      
    • 创建master节点

      kubeadm init --apiserver-advertise-address=172.10.162.204 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16
      
      
      # 如果只有1核CPU还是想启动,通过一下命令启动
      kubeadm init --ignore-preflight-errors=NumCPU
      
      • image-repository 镜像,由于K8S官方镜像被屏蔽,这里只能使用阿里云的镜像
      • apiserver-advertise-address 当前节点的IP
      • service-cidr 为服务的虚拟 IP 地址另外指定 IP 地址段
      • pod-network-cidr 指明 pod 网络可以使用的 IP 地址段,只要与当前IP不冲突即可

      这样系统就启动成功了

      image

      • 使用kubectl工具
        mkdir -p $HOME/.kube
        cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
        chown $(id -u):$(id -g) $HOME/.kube/config
      
      • 查看当前node节点

        kubectl get nodes
        

        image

  • 在另外的在 另一主机中创建node节点

    kubeadm join 172.10.162.169:6443 --token rjgg42.rpkcfh9smxep80tt \
        --discovery-token-ca-cert-hash sha256:d0a72213de0a0376e75e319fa9f6890e06b11d1c3983e59b3025fab139abc0e6 
    

    master 节点默认不能运行 pod,如果用 kubeadm 部署一个单节点集群,默认情况下无法使用,请执行以下命令解除限制

    $ kubectl taint nodes --all node-role.kubernetes.io/master-
    
    # 恢复默认值
    # $ kubectl taint nodes NODE_NAME node-role.kubernetes.io/master=true:NoSchedule
    

    默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

    kubeadm token create --print-join-command
    

    可以在master主机输入

    kubectl get nodes
    

    看到master 节点和 node 节点都部署好了

  • 由于未部署 CNI 插件,CoreDNS 未正常启动,这里写一下如何部署 CNI网络插件

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    Github容易日常抽风,这里可以使用我自己创建的镜像来设置

    kubectl apply -f  http://obs.guiyunweb.com/kube-flannel.yml
    
    # 查看状态 
    kubectl get pods -n kube-system
    # 查看节点状态
    kubectl get nodes
    

    image

image

  • 测试kubernetes集群

    我们都知道K8S是容器化技术,它可以联网去下载镜像,用容器的方式进行启动

    在Kubernetes集群中创建一个pod,验证是否正常运行

    # 下载nginx 拉取nginx镜像
    kubectl create deployment nginx --image=nginx
    
    # 拉起完查看一下状态
    

image

​ 如果我们出现Running状态的时候,表示已经成功运行了

​ 下面就需要将端口暴露出去,让其它外界能够访问

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc

image

这里可以访问到nginx集群了
image


Comment