K8s

一、 概念

  • 虚拟化技术的概念
    虚拟化技术主要是将物理资源转变为逻辑上可以管理的资源,以打破物理资源结构之间的壁垒,让计算的元件运行在虚拟的计出上,而不是运行在物理资源上。

  • 云计算技术的概念
    云计算技术主要是将硬件设备、操作系统、应用程序、带宽资源、计费系统等整理合起来姓成一个答的资源池,该资源池支持动态扩容、缩容。租户可以根据自身的需求按需购买、申请。(云主机、云服务器)

  • kubernetes(go语言开发,简称:kube或K8s:K与S之间有8个字母)是一款开源的、免费的云计算技术软件、项目。(类似OpenStack)
    K8s主要是用于批量管理物理主机节点(100+、1000+),将节点资源整合起来形成一个大的资源池,最终可以提供应用、容器(云主机)。
    docker、普罗米修斯 也是基于go语言开发,ansible基于python开发。

  • kubernetes 云平台主要有两种类型的节点:master控制节点呵Node计算节点,
    1) 在master控制节点上有如下三个组件服务

    • Apiserver
      Apiserver 是整个K8s云平台最核心的组件服务(分布式、高可用),所有对K8s集群做的增、删、改、查等操作均要经过Apiserver接口允许、授权(鉴权)。还可以将居群的数据持久化写到etcd配置数据库(K-V)中。
    • Scheduler
      Scheduler 是调度服务,主要是负责K8S集群资源的调度、分配的。例如:创建一台云主机,Scheduler服务会根据自带的规则、算法从K8S Node计算节点中选择一台来创建该资源。(同时可以设置亲和性、污点标签)
    • Controller-manager
      Controller-manager 也被称为控制管理器,是由replication controller(RC)副本、DaeminSet Deployment 资源控制器等组件组成,主要是实现资源管控,例如创建10台云主机(定义副本数10),控制管理器会检测集群最终运行的云主机数量必须是10台。

    2) 在K8S Node计算节点上主要有如下亮哥哥核心组件服务:

    • Kubelet
      Kubelet 一般部署在K8s Node计算节点上,主要是用于接收Master控制节点发送过来的指令、信号(创建、删除、查看、管理一台云主机),Kubelet服务会调用本地的虚拟化技术软件(Docker、Containerd)去创建一台云主机资源
    • Kube-proxy
      KUbe-proxy 是代理服务、组件,主要是实现 K8S Master 和 Node 节点上的Pod(容器、云主机)实现网络转发(端口:NAT)、代理服务。可以借助 Linux 内核模块 netfilter、ip_vs去实现请求转发、代理。

二、 ## 操作
环境准备(我用的是欧拉22),最低配置
Master 2C4G 40G:192.168.72.138
Node1 2C4G 40G:192.168.72.139

  1. 前期准备。所有服务器都需要操作

    • 添加hosts解析、修改主机名、时间同步、关闭selinux、swap分区、docker、开启内核转发功能
      关闭swap的原因是硬盘 I/O 读写很慢
      在这里插入图片描述
      #修改对应节点主机名;
      hostnamectl set-hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su
      ntpdate pool.ntp.org
      sed -i '/SELINUX/s/enforcing/diasbled/g' /etc/selinux/config && setenforce 0
      swapoff -a
      echo 1 > /proc/sys/net/ipv4/ip_forward
      yum install docker
      #修改docker配置文件
      mkdir /etc/docker
      cat > /etc/docker/daemon.json <<EOF
      {
      "log-driver": "json-file",
      "log-opts": {
      	"max-size": "100m"
      },
      "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com", "https://docker.m.daocloud.io"]
      }
      EOF
      #设置Docker开机启动;
      systemctl enable docker.service
      #启动Docker进程;
      systemctl start docker.service
      #查看Docker进程状态;
      ps -ef|grep -aiE docker
      
  2. 在 K8S 的 master 和 node 节点上部署 Kubeadm、Kubelet、Kubectl(命令行主程序)三个软件工具,操作方法如下:
    1)添加repo源。所有服务器执行

    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
    EOF
    
    # 安装三个组件工具+服务
    yum install -y kubeadm-1.20.4 kubelet-1.20.4 kubectl-1.20.4
    
    #设置Kubelet服务开机启动;
    systemctl enable kubelet.service
    

    2)在 K8S master 控制节点上执行初始化

    kubeadm init --control-plane-endpoint=192.168.72.138:6443 --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.20.4  --service-cidr=10.10.0.0/16   --pod-network-cidr=10.244.0.0/16 --upload-certs --v=5
    

    –control-plane-endpoint: Apiserver ip和端口,ip是master Ip
    –image-repository :指定哪个仓库
    –service-cidr: 服务的ip网段,vip、虚拟ip网段
    –upload-certs:上传证书
    –v=5:详细显示初始化过程
    执行结束后,会有如下图内容,执行
    在这里插入图片描述

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
  3. 在K8S 所有 Node 计算节点上执行加入 K8S 命令在初始化master时会有如下图内容,在 Node上执行
    在这里插入图片描述

    kubeadm join 192.168.72.138:6443 --token ouvvt1.03zr8w582r6mndeq \
    --discovery-token-ca-cert-hash sha256:eb0b63f772de47c87de66378e46ae54d2bef1f4551ebc8e7f519c1729e976cf4
    

    在 master 执行 kubectl get nodes 获取节点状态,发现有NotReady,这里是因为没有打通master和node之间pod容器的网络
    在这里插入图片描述

  4. 打通 master 和 node 之间 pod 容器的网络(calico)

    wget https://docs.projectcalico.org/archive/v3.10/manifests/calico.yaml
    kubectl apply -f calico.yaml
    

    执行 kubectl get pods -n kube-system,会全部变成running状态
    在这里插入图片描述
    变成
    在这里插入图片描述
    kubectl get node 也正常了
    在这里插入图片描述

  5. 引入 K8S UI 界面,方便管理和维护(master操作)

    wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
    

    修改文件
    在这里插入图片描述

    # 在 spec 后添加
    type: NodePort
    # 在 targetPort 后添加
    nodePort: 31001
    # 应用文件
    kubectl apply -f recommended.yaml
    # 查看dashboard状态
    kubectl get pod -n kubernetes-dashboard
    kubectl get svc -n kubernetes-dashboard
    

    在这里插入图片描述
    在浏览器访问 https://192.168.72.138:31001/
    在这里插入图片描述
    在浏览器盲打 thisisunsafe,出现如下图
    在这里插入图片描述
    创建管理员,获取token,复制到浏览器

    #创建Dashboard的管理用户;
    kubectl create serviceaccount dashboard-admin -n kube-system
    #将创建的dashboard用户绑定为管理用户;
     
    #获取刚刚创建的用户对应的Token名称;
    kubectl get secrets -n kube-system | grep dashboard
    #查看Token的详细信息;
    kubectl describe secrets -n kube-system $(kubectl get secrets -n kube-system | grep dashboard |awk '{print $1}')
    

    在这里插入图片描述

  6. 查看集群是否正常

    kubectl get pods -n kube-system
    

    全为为running则正常。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐