云盘算系列之Kubernetes(K8S)集群摆设实战解析

打印 上一主题 下一主题

主题 522|帖子 522|积分 1566

内容导读



  • Kubernetes概述
  • Kubernetes集群的组件
  • Kubernetes集群的摆设方式和工具
  • 利用摆设工具创建Kubernetes集群
一、Kubernetes概述

1.1 什么是Kubernetes

Kubernetes:用于自动摆设、扩缩和管理容器化应用程序的开源系统;
Kubernetes:简称为K8S或K8;
Docker:集装箱货轮;
Kubernetes:船舵(船的方向盘)。
1.2 为什么要利用Kubernetes

1、Kubernetes是业界领先的容器编排办理方案
(1)Mesos——Apache的开源分布式资源管理框架
由于大数据盘算调理领域的范围性,Mesos只在特定的小范围利用。
(2)Docker Swarm——Docker原生集群办理方案
紧麋集成到Docker的生态系统中,适合规模不大的应用程序情况。随着Docker企业版被Mirantis公司收购,Mirantis更倾向于编排工具Kubernetes,Docker Swarm面临被渐渐镌汰的命运。
(3)Kubernetes——谷歌公司推出的开源容器集群管理系统
(4)具有超前的核心根本特性,构建与众差别的容器编排和管理的生态。
Kubernetes内部最底层最核心的Borg/Omega系统是利用golang语言重新计划开发的,并对外开源。发展成为容器编排和管理领域的事实尺度。
2、利用Kubernetes具有极大的优势
(1)大大提拔开发和运维复杂系统的人效。
(2)全面拥抱微服务架构,办理复杂业务系统的架构标题。
(3)随时随地将系统整体迁移到公有云上。
(4)利用Kubernetes服务弹性扩容机制轻松应对突发流量。
(5)系统架构具有横向扩容能力,便于在线完成集群扩容,在多个云情况中进行弹性伸缩。
1.3 Kubernetes的主要特性



1.4 Kubernetes与云原生

1、什么是云原生
微服务、DevOps、一连交付、容器化
2、云原生的代表技术
容器、服务网格、微服务、不可变根本设施、声明式API
3、云原生应用程序的特点

4、Kubernetes是云原生技术的基石
(1)Docker实现了容器的可移植、轻量化、虚拟化,为容器技术的普及作出了重要贡献。
(2)Kubernetes办理容器编排的全生命周期管理。
(3)CNCF致力于培养和维护开源生态系统来推广云原生技术,Kubernetes成为CNCF托管的第一个开源项目。
(4)作为管理云容器平台的工具,Kubernetes简化容器化应用程序的摆设,成功办理了应用上云的效率和可移植性等标题,从而被称为云原生技术的基石。
(5)云原生的Kubernetes架构可以一连多次处置惩罚应用程序的摆设。
二、Kubernetes集群的组件



2.1 控制平面组件

1、kube-apiserver——API服务器(API Server)负责公开Kubernetes API,处置惩罚担当请求的工作。
2、etcd——所有集群数据的后台数据库,长期化存储集群中所有的资源对象以及配置数据。
3、kube-scheduler——Kubernetes调理器(Scheduler)负责Pod在集群节点中的调理分配。
4、kube-controller-manager——Kubernetes控制器管理器(Controller Manager)负责运行控制器历程。
5、cloud-controller-manager——云控制器管理器(Cloud Controller Manager)利用云根本设施技术,在公有云、私有云或者混合云情况中运行Kubernetes。
2.2 工作节点组件

1、kubelet——在集群中每个节点上运行,是负责启动容器的重要的守护历程,用于保证容器在Pod中健康运行。
2、kube-proxy ——集群中每个节点上所运行的网络代理,是实现Kubernetes服务(Service)的通信与负载平衡机制的重要组件。
3、容器运行时(Container Runtime)——在Kubernetes集群的每个节点上运行,负责容器的整个生命周期。
2.3 功能插件



2.4 Docker容器组件

1、鉴戒集装箱装运货物的头脑,让开发人员将应用程序及其依靠打包到一个轻量级、可移植的容器中,然后发布到任何运行Docker容器引擎的情况中,以容器形式来运行该应用程序。
2、Docker 是一个用于开发、发布和运行应用程序的开放平台。
3、Docker 重新定义了应用程序在差别情况中的移植和运行方式。
三、Kubernetes集群工具与摆设方式

3.1 摆设工具

minikube——搭建单节点的Kubernetes集群。
kubeadm ——快速摆设一个Kubernetes集群,适用于生产情况快速摆设。
kOps ——官方推出的Kubernetes运维工具,适用于生产情况ubernetes的安装、升级和管理。
Kubespray ——摆设生产情况Kubernetes集群的工具。
以kubeadm工具为例:
命令
功能
kubeadm init
初始化(创建)控制平面节点
kubeadm join
创建工作节点并将其加入到集群中
kubeadm upgrade
将Kubernetes集群升级到新版本
kubeadm config
查看和处置惩罚Kubernetes配置信息,例如kubeadm config print init-defaults命令显示init命令配置,kubeadm config print join-defaults显示join命令配置,kubeadm config images pull命令根据配置文件拉取镜像,kubeadm config images list命令显示需要拉取的镜像
kubeadm token
管理kubeadm join命令所利用的令牌
kubeadm reset
还原通过kubeadm init或kubeadm join命令对节点进行的任何变更
kubeadm certs
管理Kubernetes证书
kubeadm kubeconfig
管理kubeconfig文件
kubeadm version
显示kubeadm的版本信息
3.2 二进制方式的集群摆设

堆叠etcd拓扑结构一:

堆叠etcd拓扑结构二:


四、利用摆设工具创建Kubernetes集群

4.1 规划Kubernetes集群

节点范例
主机名
IP地址
硬件配置
控制平面节点
master01
192.168.10.30
CPU:4核;内存:8GB;硬盘:60GB
工作节点
node01
192.168.10.31
CPU:2核;内存:4GB;硬盘:60GB
工作节点
node02
192.168.10.32
CPU:2核;内存:4GB;硬盘:60GB
4.2 准备Kubernetes集群安装情况

1、准备节点主机
  1. [root@master01 ~]# hostnamectl set-hostname master01     # 修改主机名
  2. [root@master01 ~]# bash                                  # 重新执行Shell使配置生效
  3. [root@master01 ~]# nmcli connection show                 # 获取当前的网络连接信息
  4. NAME    UUID                                  TYPE      DEVICE
  5. virbr0  3d081de7-b0f1-4105-ae59-645bb6163a1c  bridge    virbr0
  6. ens160  83daa21e-03bb-4cea-b286-d6a0fb6df711  ethernet  --  # 需配置的网络连接
  7. [root@master01 ~]# nmcli connection modify ens160 ipv4.addr 192.168.10.30/24    ipv4.gateway 192.168.10.2  connection.autoconnect yes  ipv4.dns "192.168.10.2  114.114.114.114"                                                             # 修改网络连接配置
  8. [root@master01 ~]# nmcli connection up ens160               # 激活网络连接使配置生效
  9. # 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3
复制代码
2、配置主机名解析(/etc/hosts)
  1. 192.168.10.30  master01
  2. 192.168.10.31  node01
  3. 192.168.10.32  node02
复制代码
3、禁用防火墙
  1. [root@master01 ~]#systemctl stop firewalld && systemctl disable firewalld
复制代码
4、禁用SELinux
  1. setenforce 0        # 临时禁用SELinux
  2. sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
复制代码
5、关闭交换分区
  1. swapoff –a                               # 临时关闭
  2. sed -ri ‘s/.*swap.*/#&/’ /etc/fstab      # 重启后永久关闭
复制代码
6、设置系统时间同步
  1. # 修改/etc/chrony.conf配置文件
  2. server ntp1.aliyun.com iburst
  3. server ntp2.aliyun.com iburst
  4. server ntp1.tencent.com iburst
  5. server ntp2.tencent.com iburst
复制代码
  1. #重启chrony
  2. systemctl restart chronyd.service
复制代码
7、安装IPVS相关工具
(1)安装ipset和ipvsadm工具
  1. yum install -y ipsetipvsadm
复制代码
(2)编写/etc/sysconfig/modules/ipvs.modules脚本文件
  1. #!/bin/bash
  2. modprobe -- ip_vs
  3. modprobe -- ip_vs_rr
  4. modprobe -- ip_vs_wrr
  5. modprobe -- ip_vs_sh
  6. modprobe -- nf_conntrack     # 如果内核版本低于4.18,则改用nf_conntrack_ipv4模块
复制代码
(3)验证加载IPVS所需的模块
  1. bash /etc/sysconfig/modules/ipvs.modules
  2. lsmod | grep -e -ip_vs -e nf_conntrack    # 查看相关的模块
复制代码
8、安装containerd
(1)调整内核参数。
载入相关模块:
  1. modprobe overlay
  2. modprobe br_netfilter
复制代码
编辑/etc/modules-load.d/containerd.conf文件:
  1. net.bridge.bridge-nf-call-ip6tables = 1
  2. net.bridge.bridge-nf-call-iptables = 1
  3. net.ipv4.ip_forward = 1
复制代码
使以上内核参数调整生效:
  1. sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
复制代码
(2)下载containerd软件包。
  1. wget https://github.com/containerd/containerd/releases/download/v1.6.8/cri-containerd-1.6.8-linux-amd64.tar.gz
复制代码
(3)将该软件包解压缩到系统根目录中。
  1. tar -zxvf cri-containerd-1.6.8-linux-amd64.tar.gz -C /
复制代码
(4)修改/etc/containerd/config.toml配置文件。
  1. SystemdCgroup = true
  2. sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
  3. [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  4. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  5. endpoint = ["https://usydjf4t.mirror.aliyuncs.com","https://mirror.ccs.tencentyun.com","https://registry.docker-cn.com","http://h$
  6. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
  7. endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]
复制代码
(5)启动containerd并设置为开机启动。
  1. [root@master01 ~]# systemctl daemon-reload && systemctl enable containerd && systemctl start containerd
复制代码
(6)查看containerd的版本信息进行验证。
  1. [root@master01 ~]# crictl version
  2. crictl version:  0.1.0
  3. RuntimeName:  containerd
  4. RuntimeVersion:  v1.6.8
  5. RuntimeApiVersion:  v1
复制代码
9、添加阿里云的Kubernetes软件源
创建/etc/yum.repos.d/kubernetes.repo文件
  1. [kubernetes]
  2. name=Kubernetes
  3. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  4. enabled=1
  5. gpgcheck=1
  6. repo_gpgcheck=0
  7. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
复制代码
4.3 摆设Kubernetes集群节点

1、配置节点主机的SSH互信
(1)实行ssh-keygen命令天生SSH公钥认证所需的公钥和私钥文件。
  1. [root@master01 ~]# ssh-keygen
复制代码
(2)将所天生的公钥发送到要免密登录的主机中。
  1. [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master01
复制代码
(3)测试其中一台主机的免密SSH登录。
  1. [root@master01 ~]# ssh node01
  2. Activate the web console with: systemctl enable --now cockpit.socket
  3. Last login: Mon Nov 28 10:12:13 2022
复制代码
(4)退出并注销
  1. [root@node01 ~]# exit
  2. Connection to node01 closed.
复制代码
2、初始化控制平面节点
实行初始化命令:
  1. [root@master01 ~]# kubeadminit --apiserver-advertise-address=192.168.10.30  --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.25.4   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16   --ignore-preflight-errors=all
  2. [init] Using Kubernetes version: v1.25.4
  3. Then you can join any number of worker nodes by running the following on each as root:                                   # 提示加入工作节点的命令(包括令牌值)
  4. kubeadm join 192.168.10.30:6443 --token 51siix.szxjd53d406j615y \
  5. --discovery-token-ca-cert-hash sha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4
复制代码
3、为kubectl命令提供配置文件
  1. [root@master01 ~]# mkdir -p $HOME/.kube
  2. [root@master01 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. [root@master01 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
4、将工作节点加入集群
  1. [root@master01 ~]# ssh node01    # 免密登录到node01主机
  2. Activate the web console with: systemctl enable --now cockpit.socket
  3. Last login: Mon Nov 28 21:40:02 2022
  4. [root@node01 ~]# kubeadm join 192.168.10.30:6443 --token 51siix.szxjd53d406j615y
  5. --discovery-token-ca-cert-hash sha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4
  6. [preflight] Running pre-flight checks
  7. This node has joined the cluster:  # 提示此节点已成功加入到集群
  8. [root@node01 ~]# exit              # 退出node01主机登录
复制代码
4.4 安装Pod网络插件

1、从官网下载Calico插件安装用的配置文件calico.yaml。
2、修改calico.yaml文件。
  1. - name: CALICO_IPV4POOL_CIDR
  2. value: "10.244.0.0/16"
复制代码
3、应用calico.yaml配置文件,在集群中摆设Calico插件(创建多种Kubernetes资源)。
  1. [root@master01 ~]#  kubectl apply -f calico.yaml
复制代码
4、查看名称空间kube-system下的所有Pod对象。
  1. [root@master01 ~]#  kubectl get pods -n kube-system
  2. NAME                                       READY   STATUS    RESTARTS      AGE
  3. calico-kube-controllers-798cc86c47-jrlhm   1/1     Running   0             11m
复制代码
5、进一步查看Calico插件在各节点上的摆设情况。
  1. [root@master01 ~]#  kubectl get po -A -o wide | grep calico
  2. kube-system   calico-kube-controllers-798cc86c47-jrlhm   1/1     Running   0             11m   10.88.0.2       node02     <none>           <none>
  3. kube-system   calico-node-4bj7s                          1/1     Running   0             11m   192.168.10.32   node02     <none>           <none>
  4. kube-system   calico-node-bqnzx                          1/1     Running   0             11m   192.168.10.30   master01   <none>           <none>
  5. kube-system   calico-node-s7fsd                          1/1     Running   0             11m   192.168.10.31   node01     <none>           <none>
复制代码
4.5 测试Kubernetes集群

1、创建一个简单的Deployment资源以运行Nginx。
  1. [root@master01 ~]# kubectl create deployment nginx --image=nginx:1.8.1
  2. deployment.apps/nginx created
复制代码
2、将该Deployment资源发布为Service资源供外部访问。
  1. [root@master01 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
  2. service/nginx exposed
复制代码
3、查看所创建的Pod和Service资源是否正常运行。
  1. [root@master01 ~]#  kubectl get pod,svc
  2. NAME                            READY   STATUS    RESTARTS   AGE
  3. pod/nginx-cf797f6c5-s5lkq   1/1     Running   0          2m26s
  4. NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
  5. service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP         12h
  6. service/nginx         NodePort    10.105.200.136   <none>       80:30820/TCP   56s
复制代码
4、根据所袒露的节点端口访问所发布的Nginx服务器。
  1. [root@master01 ~]# curl http://node02:30820
  2. ......
  3. Thank you for using nginx.
复制代码
4.6 利用containerd命令行工具crictl

1、查看节点上当前的镜像列表。
  1. [root@master01 ~]#  crictl images
  2. IMAGE                       TAG                 IMAGE ID              SIZE
  3. docker.io/calico/cni     v3.24.5             628dd70880410       87.5MB
  4. docker.io/calico/node    v3.24.5             54637cb36d4a1       81.6MB
  5. ......
复制代码
2、查看节点上当前的容器列表。
  1. [root@master01 ~]#  crictlps
  2. CONTAINER           IMAGE             CREATED            STATE     NAME        ATTEMPT
  3. POD ID                  POD
  4. 75e3ecda6ac1a  54637cb36d4a1    26 minutes ago     Running      calico-node   0
  5. f6e1607c1c245       calico-node-bqnzx
  6. ......
复制代码
更多出色内容请关注本站! 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表