tsx81429 发表于 2024-7-29 06:50:59

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

内容导读



[*]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的主要特性

https://i-blog.csdnimg.cn/direct/bb5013e9b6104a58ae5981fc8c0b7433.png

1.4 Kubernetes与云原生

1、什么是云原生
微服务、DevOps、一连交付、容器化
2、云原生的代表技术
容器、服务网格、微服务、不可变根本设施、声明式API
3、云原生应用程序的特点
https://i-blog.csdnimg.cn/direct/b8353965a48846a1a3319597954728c0.png
4、Kubernetes是云原生技术的基石
(1)Docker实现了容器的可移植、轻量化、虚拟化,为容器技术的普及作出了重要贡献。
(2)Kubernetes办理容器编排的全生命周期管理。
(3)CNCF致力于培养和维护开源生态系统来推广云原生技术,Kubernetes成为CNCF托管的第一个开源项目。
(4)作为管理云容器平台的工具,Kubernetes简化容器化应用程序的摆设,成功办理了应用上云的效率和可移植性等标题,从而被称为云原生技术的基石。
(5)云原生的Kubernetes架构可以一连多次处置惩罚应用程序的摆设。
二、Kubernetes集群的组件

https://i-blog.csdnimg.cn/direct/39c2d09ee6a54bdab991ca3df56216f0.png

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 功能插件

https://i-blog.csdnimg.cn/direct/3d46ba0aa41e4ee9bd7089fc8fb91049.png

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拓扑结构一:
https://i-blog.csdnimg.cn/direct/f6b380f0b3c442cea7b0ed5e80006efd.png
堆叠etcd拓扑结构二:
https://i-blog.csdnimg.cn/direct/02af2ccf01e24a6d88cf3f3f477ba676.png

四、利用摆设工具创建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、准备节点主机
# hostnamectl set-hostname master01   # 修改主机名
# bash                                  # 重新执行Shell使配置生效
# nmcli connection show               # 获取当前的网络连接信息
NAME    UUID                                  TYPE      DEVICE
virbr03d081de7-b0f1-4105-ae59-645bb6163a1cbridge    virbr0
ens16083daa21e-03bb-4cea-b286-d6a0fb6df711ethernet--# 需配置的网络连接
# nmcli connection modify ens160 ipv4.addr 192.168.10.30/24    ipv4.gateway 192.168.10.2connection.autoconnect yesipv4.dns "192.168.10.2114.114.114.114"                                                             # 修改网络连接配置
# nmcli connection up ens160               # 激活网络连接使配置生效
# 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3 2、配置主机名解析(/etc/hosts)
192.168.10.30master01
192.168.10.31node01
192.168.10.32node02 3、禁用防火墙
#systemctl stop firewalld && systemctl disable firewalld 4、禁用SELinux
setenforce 0      # 临时禁用SELinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 5、关闭交换分区
swapoff –a                               # 临时关闭
sed -ri ‘s/.*swap.*/#&/’ /etc/fstab      # 重启后永久关闭 6、设置系统时间同步
# 修改/etc/chrony.conf配置文件
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp1.tencent.com iburst
server ntp2.tencent.com iburst #重启chrony
systemctl restart chronyd.service 7、安装IPVS相关工具
(1)安装ipset和ipvsadm工具
yum install -y ipsetipvsadm (2)编写/etc/sysconfig/modules/ipvs.modules脚本文件
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack   # 如果内核版本低于4.18,则改用nf_conntrack_ipv4模块 (3)验证加载IPVS所需的模块
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e -ip_vs -e nf_conntrack    # 查看相关的模块 8、安装containerd
(1)调整内核参数。
载入相关模块:
modprobe overlay
modprobe br_netfilter 编辑/etc/modules-load.d/containerd.conf文件:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 使以上内核参数调整生效:
sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf (2)下载containerd软件包。
wget https://github.com/containerd/containerd/releases/download/v1.6.8/cri-containerd-1.6.8-linux-amd64.tar.gz (3)将该软件包解压缩到系统根目录中。
tar -zxvf cri-containerd-1.6.8-linux-amd64.tar.gz -C / (4)修改/etc/containerd/config.toml配置文件。
SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"


endpoint = ["https://usydjf4t.mirror.aliyuncs.com","https://mirror.ccs.tencentyun.com","https://registry.docker-cn.com","http://h$

endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"] (5)启动containerd并设置为开机启动。
# systemctl daemon-reload && systemctl enable containerd && systemctl start containerd (6)查看containerd的版本信息进行验证。
# crictl version
crictl version:0.1.0
RuntimeName:containerd
RuntimeVersion:v1.6.8
RuntimeApiVersion:v1 9、添加阿里云的Kubernetes软件源
创建/etc/yum.repos.d/kubernetes.repo文件

name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
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 4.3 摆设Kubernetes集群节点

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

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

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 云盘算系列之Kubernetes(K8S)集群摆设实战解析