K8s 简介以及详细部署步骤

news/2024/12/22 14:24:27/

Kubernetes 简介

应用部署方式演变

在部署应用程序的方式上,主要经历了三个阶段:

1、传统部署

互联网早期,会直接将应用程序部署在物理机上

优点:简单,不需要其它技术的参与

缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

2、虚拟化部署

可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

优点:程序环境不会相互产生影响,提供了一定程度的安全性

缺点:增加了操作系统,浪费了部分资源

3、容器化部署

与虚拟化类似,但是共享了操作系统

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器

当并发访问量变大的时候,怎么样做到横向扩展容器数量

容器编排应用

为了解决这些容器编排问题,就产生了一些容器编排的软件:

1、Swarm:Docker自己的容器编排工具

2、Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用

3、Kubernetes:Google开源的的容器编排工具

Kubernetes 简介

1、在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年

2、Borg系统运行管理着成千上万的容器应用。

3、Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

3、Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

1、自我修复

一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

2、弹性伸缩

可以根据需要,自动对集群中正在运行的容器数量进行调整

3、服务发现

服务可以通过自动发现的形式找到它所依赖的服务

4、负载均衡

如果一个服务起动了多个容器,能够自动实现请求的负载均衡

5、版本回退

如果发现新发布的程序版本有问题,可以立即回退到原来的版本

6、存储编排

可以根据容器自身的需求自动创建存储卷

K8s 的设计架构

K8s 各个组件的用途

一个kubernetes集群主要是由控制节点(master)、**工作节点(node)**构成,每个节点上都会安装不同的组件

master:集群的控制平面,负责集群的决策

1、ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

2、Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

3、ControllerManager : 负责维护集群的状态,比如程序部署 安排、故障检测、自动扩展、滚动更新等

4、Etcd :负责存储集群中各种资源对象的信息

node:集群的数据平面,负责为容器提供运行环境

1、kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

2、Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)

3、kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

K8s 各组件之间的调用关系

当我们要运行一个web服务时:

1、kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

2、web服务的安装请求会首先被发送到master节点的apiServer组件

3、apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上;在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer

4、apiServer调用controller-manager去调度Node节点安装web服务

5、kubelet接收到指令后,会通知docker,然后由docker来启动一个web服务的pod

6、如果需要访问web服务,就需要通过kube-proxy来对pod产生访问的代理

K8S 常用名词的概念

1、Master

集群控制节点,每个集群需要至少一个master节点负责集群的管控

2、Node

工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的Pod负责运行这些容器

3、Pod

kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

4、Controller

控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

5、Service

pod对外服务的统一入口,下面可以维护者同一类的多个pod

6、Label

标签,用于对pod进行分类,同一类pod会拥有相同的标签

7、NameSpace

命名空间,用来隔离pod的运行环境

k8s 的分层架构

1、核心层

Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

2、应用层

部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

3、管理层

系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

4、接口层

kubectl命令行工具、客户端SDK以及集群联邦

5、生态系统

在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

6、Kubernetes外部

日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

7、Kubernetes内部

CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

K8s 集群环境搭建

k8s 中容器的管理方式

K8S 集群创建方式有3种:

1、centainerd

默认情况下,K8S在创建集群时使用的方式

2、docker

Docker使用的普记录最高,虽然K8S在1.24版本后已经废除了kubelet对docker的支持,但时可以借助cri-docker方式来实现集群创建

3、cri-o

CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方式来实现Kubernetes集群的创建。

docker 和cri-o 这两种方式要对kubelet程序的启动参数进行设置

k8s 集群部署

k8s 环境部署说明

K8S中文官网:https://kubernetes.io/zh-cn/

主机名ip角色
Docker-hub172.25.254.253harbor仓库
k8s-master172.25.254.10master,k8s集群控制节点
k8s-node1172.25.254.100worker,k8s集群工作节点
k8s-node2172.25.254.200worker,k8s集群工作节点

集群初始环境

1、所有节点禁用selinux和防火墙

2、所有节点同步时间和本地域名解析

3、所有节点安装docker-ce

4、所有节点禁用swap,注意还需注释掉 /etc/fstab 文件中 swap 的定义

集群环境初始化

所有设备均配置

禁用swap
[root@K8s-master ~]# systemctl mask dev-nvme0n1p3.swap
[root@K8s-master ~]# swapoff -a[root@K8s-master ~]# vim /etc/fstab
......
#/dev/mapper/rhel-swap   none                    swap    defaults        0 0

在这里插入图片描述

安装docker

1、配置软件源

[root@K8s-master ~]# vim /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0#如果使用rhel7或者centos7的Linux系统时,该源解决 centos7/rhel7 的docker依赖关系
#[centos]
#name=extras
#baseurl=https://mirrors.aliyun.com/centos/7.9.2009/extras/x86_64/
#gpgcheck=0

2、安装Docker

[root@K8s-master ~]# yum install docker-ce -y

3、启用Docker

[root@docker1 ~]# systemctl enable --now docker
设定docker的资源管理模式为systemd

Rhel9 Linux 系统设定

红帽九的系统默认为 systemd 模式

[root@K8s-master ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://reg.tym.org"]
}

Rhel7 Linux 系统设定(设定为systemd):

[root@K8s-master ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://reg.tym.org"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
[root@K8s-master ~]# docker info

在这里插入图片描述

登录harbor仓库

1、将生成的证书拷贝至Docker的配置目录下

[root@K8s-master ~]# ls /etc/docker/certs.d/reg.tym.org/
tym.org.crt

2、登录harbor仓库,可正常从仓库拉取镜像

[root@K8s-master ~]# docker login reg.tym.org

3、查看配置信息

[root@K8s-master ~]# docker info

在这里插入图片描述

K8s 部署

安装 K8s 部署工具(所有设备)

1、部署软件仓库,添加K8s源

[root@K8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0

2、安装工具

[root@k8s-master ~]# yum install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y
设置 kubectl 命令补齐功能(master)
[root@K8s-master ~]# yum install bash-completion -y
#安装补全命令的插件[root@K8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
#将K8s的补全命令加载到环境变量内[root@K8s-master ~]# source  ~/.bashrc
#重新加载环境变量
安装 cri-docker(所有设备)

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker

软件下载:https://github.com/Mirantis/cri-dockerd

1、下载软件包和软件依赖

在这里插入图片描述

2、安装软件

[root@k8s-master ~]# dnf install libcgroup-0.41-19.el8.x86_64.rpm \
> cri-dockerd-0.3.14-3.el8.x86_64.rpm -y

3、修改配置文件

[root@K8s-master ~]# vim /lib/systemd/system/cri-docker.service
......
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.tym.org/k8s/pause:3.9
......#指定网络插件名称及基础容器镜像

在这里插入图片描述

4、重新加载配置

[root@K8s-master ~]# systemctl daemon-reload

5、启用服务

[root@K8s-master ~]# systemctl enable --now cri-docker

6、查看是否存在套接字文件

[root@K8s-master ~]# ll /var/run/cri-dockerd.sock

在这里插入图片描述

拉取 K8s 所需镜像(master)

1、拉取K8s 所需的镜像

[root@K8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

在这里插入图片描述

2、上传镜像至harbor仓库

[root@K8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.tym.org/k8s/"$3)}'
#将镜像打上标签[root@K8s-master ~]# docker images  | awk '/k8s/{system("docker push "$1":"$2)}'
#上传镜像
集群初始化(master)

1、执行初始化命令

[root@K8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.tym.org/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

2、指定集群配置文件变量

[root@K8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile[root@K8s-master ~]# source ~/.bash_profile
#重新加载配置文件

3、查看服务状态

[root@K8s-master ~]# systemctl status kubelet.service

在这里插入图片描述

安装 flannel 网络插件(master)

官方网站:https://github.com/flannel-io/flannel

1、下载 flannel 的 yaml 部署文件

[root@K8s-master ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

2、修改 yaml 文件

将 image 的下载路径进行修改

将 " docker.io/ "去掉

[root@K8s-master k8s]# vim kube-flannel.yml
......
image: flannel/flannel:v0.25.5
......
image: flannel/flannel-cni-plugin:v1.5.1-flannel1
......
image: flannel/flannel:v0.25.5
......

在这里插入图片描述

3、下载 flannel 镜像

在这里插入图片描述

4、将 flannel 镜像上传至 harbor 仓库

[root@K8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.tym.org/flannel/flannel:v0.25.5
[root@K8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.tym.org/flannel/flannel-cni-plugin:v1.5.1-flannel1[root@k8s-master ~]# docker push reg.tym.org/flannel/flannel:v0.25.5
[root@K8s-master ~]# docker push reg.tym.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

5、安装flannel网络插件(在yaml文件所在目录执行)

[root@K8s-master k8s]# kubectl apply -f kube-flannel.yml
#安装网络插件[root@K8s-master k8s]# kubectl delete -f kube-flannel.yml
#删除网络插件
重新生成 token(master)
[root@K8s-master ~]# kubeadm token create --print-join-command
重置集群命令
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock
节点扩容

1、添加工作节点至集群内

[root@K8s-node1 ~]# kubeadm join 172.25.254.10:6443 --token pqrc63.pyuvi86lprjsxz7v --discovery-token-ca-cert-hash sha256:6561cb961571069d848d1b91c0dfb1c1e95ee3ba35ff5785767bdc6a913baa23 \
--cri-socket=unix:///var/run/cri-dockerd.sock

2、在 master 节点中查看所有 node 的状态

[root@k8s-master ~]# kubectl get nodes

在这里插入图片描述

[root@K8s-master k8s]# kubectl -n kube-flannel get pods

在这里插入图片描述

3、测试

[root@k8s-master ~]# kubectl run test --image nginx:latest
#创建并运行一个pod[root@k8s-master ~]# kubectl get pod
#获取pod的信息

在这里插入图片描述


http://www.ppmy.cn/news/1527340.html

相关文章

MySQL函数:日期函数

先贴一张黑马程序员的听课截图 1.返回当前日期 CURDATE(); select CURDATE(); //获取当前日期2. 返回当前时间 CURTIME(); select CURTIME(); //获取当前时间3.返回当前日期和时间NOW() select NOW(); //获取当前日期和时间 4.获取指定date的年份YEAR(date) select YEAR…

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的&#xff0c;因为压根就不是一个规则。但是他们在内存中…

【鸿蒙】HarmonyOS NEXT星河入门到实战9-组件化开发进阶应用状态管理

目录 1.1 创建页面 1.2 页面跳转和后退 1.3 页面栈 1.4 路由模式 1.5 路由传参 2、生命周期 3、Stage模型 3.1 目录概览 3.2 app.json5应用配置 3.3 module.json5模型配置 3.4 UIAbility组件 3.5 UIAbility的添加和设置启动 3.6 UIAbility组件的生命周期 3.7 拉起另…

战神诸神黄昏9月19日登录PC端! 手机怎么玩战神诸神黄昏

9月19日&#xff0c;《战神&#xff1a;诸神黄昏》正式登录PC端&#xff0c;这是一部动作冒险游戏。要是你想随时随地在手机或平板上也能玩《战神&#xff1a;诸神黄昏》&#xff0c;可以使用网易GameViewer远程帮你实现。 网易GameViewer远程作为一款专为游戏玩家打造的远程软…

LA Patria:哥伦比亚新闻媒体的发稿之光

LA Patria&#xff1a;哥伦比亚新闻媒体的发稿之光 在信息快速流动的今天&#xff0c;哥伦比亚新闻媒体LA Patria以其独到的视角和严谨的报道&#xff0c;成为国内外关注的焦点。本文旨在探讨LA Patria如何通过其高质量的新闻报道&#xff0c;为读者提供深度与广度并重的信息解…

MySQL——数据库的高级操作(二)用户管理(3)删除普通用户

在 MySQL中&#xff0c;通常会创建多个普通用户来管理数据库&#xff0c;但如果发现某些用户是没有必要的&#xff0c;就可以将其删除&#xff0c;删除用户有两种方式&#xff0c;接下来将针对这两种方式进行详细的讲解。 1、使用 DROP USER 语句删除用户 DROP USER 语句与 DR…

从底层原理上理解ClickHouse 中的 Distributed 引擎

ClickHouse 的 Distributed 引擎 是实现大规模分布式查询和高可用性的关键技术之一&#xff0c;它允许集群中的多个节点协同工作&#xff0c;提供横向扩展能力和负载均衡机制。在底层&#xff0c;Distributed 引擎通过一系列的机制和策略&#xff0c;确保数据的分布、查询的并行…

如何查看macos是x86还是arm

要查看你的 macOS 是基于 x86 还是 ARM 架构&#xff0c;可以使用以下方法&#xff1a; 1. 使用 “关于本机” 方法 点击左上角的 苹果图标 。选择 关于本机。在弹出的窗口中&#xff0c;你会看到你的 Mac 处理器类型&#xff1a; 如果显示 Intel&#xff0c;则你的 Mac 使…