马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
内容导读
- 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、准备节点主机
- [root@master01 ~]# hostnamectl set-hostname master01 # 修改主机名
- [root@master01 ~]# bash # 重新执行Shell使配置生效
- [root@master01 ~]# nmcli connection show # 获取当前的网络连接信息
- NAME UUID TYPE DEVICE
- virbr0 3d081de7-b0f1-4105-ae59-645bb6163a1c bridge virbr0
- ens160 83daa21e-03bb-4cea-b286-d6a0fb6df711 ethernet -- # 需配置的网络连接
- [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" # 修改网络连接配置
- [root@master01 ~]# nmcli connection up ens160 # 激活网络连接使配置生效
- # 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3
复制代码 2、配置主机名解析(/etc/hosts)
- 192.168.10.30 master01
- 192.168.10.31 node01
- 192.168.10.32 node02
复制代码 3、禁用防火墙
- [root@master01 ~]#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"
- [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
- [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
- endpoint = ["https://usydjf4t.mirror.aliyuncs.com","https://mirror.ccs.tencentyun.com","https://registry.docker-cn.com","http://h$
- [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
- endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]
复制代码 (5)启动containerd并设置为开机启动。
- [root@master01 ~]# systemctl daemon-reload && systemctl enable containerd && systemctl start containerd
复制代码 (6)查看containerd的版本信息进行验证。
- [root@master01 ~]# crictl version
- crictl version: 0.1.0
- RuntimeName: containerd
- RuntimeVersion: v1.6.8
- RuntimeApiVersion: v1
复制代码 9、添加阿里云的Kubernetes软件源
创建/etc/yum.repos.d/kubernetes.repo文件
- [kubernetes]
- 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公钥认证所需的公钥和私钥文件。
- [root@master01 ~]# ssh-keygen
复制代码 (2)将所天生的公钥发送到要免密登录的主机中。
- [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master01
复制代码 (3)测试其中一台主机的免密SSH登录。
- [root@master01 ~]# ssh node01
- Activate the web console with: systemctl enable --now cockpit.socket
- Last login: Mon Nov 28 10:12:13 2022
复制代码 (4)退出并注销
- [root@node01 ~]# exit
- Connection to node01 closed.
复制代码 2、初始化控制平面节点
实行初始化命令:
- [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
- [init] 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命令提供配置文件
- [root@master01 ~]# mkdir -p $HOME/.kube
- [root@master01 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- [root@master01 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
复制代码 4、将工作节点加入集群
- [root@master01 ~]# ssh node01 # 免密登录到node01主机
- Activate the web console with: systemctl enable --now cockpit.socket
- Last login: Mon Nov 28 21:40:02 2022
- [root@node01 ~]# kubeadm join 192.168.10.30:6443 --token 51siix.szxjd53d406j615y
- --discovery-token-ca-cert-hash sha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4
- [preflight] Running pre-flight checks
- This node has joined the cluster: # 提示此节点已成功加入到集群
- [root@node01 ~]# 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资源)。
- [root@master01 ~]# kubectl apply -f calico.yaml
复制代码 4、查看名称空间kube-system下的所有Pod对象。
- [root@master01 ~]# kubectl get pods -n kube-system
- NAME READY STATUS RESTARTS AGE
- calico-kube-controllers-798cc86c47-jrlhm 1/1 Running 0 11m
复制代码 5、进一步查看Calico插件在各节点上的摆设情况。
- [root@master01 ~]# 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。
- [root@master01 ~]# kubectl create deployment nginx --image=nginx:1.8.1
- deployment.apps/nginx created
复制代码 2、将该Deployment资源发布为Service资源供外部访问。
- [root@master01 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
- service/nginx exposed
复制代码 3、查看所创建的Pod和Service资源是否正常运行。
- [root@master01 ~]# 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服务器。
- [root@master01 ~]# curl http://node02:30820
- ......
- Thank you for using nginx.
复制代码 4.6 利用containerd命令行工具crictl
1、查看节点上当前的镜像列表。
- [root@master01 ~]# 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、查看节点上当前的容器列表。
- [root@master01 ~]# crictlps
- CONTAINER IMAGE CREATED STATE NAME ATTEMPT
- POD ID POD
- 75e3ecda6ac1a 54637cb36d4a1 26 minutes ago Running calico-node 0
- f6e1607c1c245 calico-node-bqnzx
- ......
复制代码 更多出色内容请关注本站!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |