k8s简介
1.了解Kubernetes(K8S)是什么?它的功能、优缺点?
是谷歌开源的容器编排系统,使用Go语言编写,适合管理大规模的容器集群
k8s 是用于自动化部署、扩展和管理容器化应用程序的开源系统。
管理容器化应用的平台,开源的,更简单高效地部署容器化应用
dockercompose对比
功能:
-
通过yaml配置文件实现一键集群中容器的批量部署;
-
扩容、缩容、更新、回滚、发布、服务发现...
-
默认提供负载均衡,高可用
优缺点:
优点:
支持自动部署、扩缩容、负载均衡和滚动更新
支持多副本部署和跨节点分布,避免单点故障。
2.为什么要学习K8S,学完K8S后能做什么?
3.了解K8S和Docker关系、区别?
K8S和Docker关系是平台与工具的关系
Docker 是创建和运行容器的工具,K8S 是管理大量容器的平台
4.了解K8S的结构,核心组件?用 “是什么 - 解决什么问题 - 核心作用” 的结构?
-
Master管理节点、 控制平面(Control Plane,旧称Master)
-
API server:集群的“统一入口”,对于k8s的所有操作,都要经过API server;负责验证请求、转发指令,是组件间通信的唯一渠道。
-
etcd:是专门存储配置信息的数据库,key-value结构
-
Controller Manager:控制管理器,运行多种“控制器”进程(如节点控制器、副本控制器),监控集群状态,自动修复异常(如Pod崩溃了,自动新建一个)。
-
Scheduler:调度器,将容器调度到相应的节点上运行
-
-
Worker Node 工作节点:容器的运行监控管理
-
kubelet:每个节点上的“代理程序”,代理Master执行具体的任务管理容器运行时,监控容器的状态,向Master节点汇报节点状态
-
kube-proxy:利用LVS、iptable的Linux的组件实现负载均衡与网络通信,节点的“网络代理”,管理节点网络规则,实现Pod之间、Pod与外部的通信,支持Service的负载均衡。
-
Container Runtime:用于创建、运行容器的工具,例如:Docker、Podmon、Containerd、CRI-0
-
5.了解K8S的安装部署方式有哪些?
k8s基础概念
Master节点:管理整个k8s集群
-
生产环境至少3个节点,大型集群5个节点;
-
测试环境1个
Worker节点:运行容器,Pod,容器生命周期管理
-
每个节点运行10~100个pod;根据pod的规模调整Worker节点的数量
Pod
Pod是k8s中最小的管理单元,Pod是用于管理容器的
Pod的作用是“虚拟的节点”,微型节点,一个Pod中至少可以管理运行一个或多个容器,在同一个Pod中的容器可以共享网络和存储
管理器
用户管理Pod的一系列管理器
副本管理
生命周期管理
弹性的扩缩容管理
Deployment:管理无状态服务(Nginx、Tomcat、PHP)
StatefulSet:管理有状态服务(MySQL)
Job:管理一次性服务
CronJob:计划执行服务
服务发现与网络通信
通过网络将数据请求转发给指定容器;实现负载均衡的功能
Service实现Pod的服务发现与负载均衡;
配置与存储
ConfigMap:存储配置文件
Secret:存储密码或密钥
PV/PVC:持久化存储的资源与资源绑定
资源管理
Namespace:可以给不同的业务分组管理,实现资源的隔离与限制
Label:标签,实现Pod调度、Pod的资源管理器、服务器发现、负载均衡;
k8s常用命令
kubeadm
-
初始化master节点,全局设置
#打印初始化配置 kubeadm config print init-defaults #返回新的node节点的token kubeadm token create --print-join-command
-
init:初始化Master节点
-
join:初始化Node节点并加入集群
-
reset:重置当前节点,无论是Master节点还是Node节点都可以重置
-
token: kubeadm init或输出的命令中返回的kubeadm join
kubectl:k8s集群管理命令
kubectl主要职责是对资源对象进行操作。
k8s当中的一切皆为资源;
-
cluster 集群
-
cs 组件对象
-
cm ConfigMap对象
-
ds DaemonSet对象
-
deploy deployments对象,k8s最常用的控制器
-
ep Endpoints端点集合;ip地址列表
-
ev events集群事件
-
ingress 访问入口
-
no nodes节点
-
ns namespaces命名空间
-
rs replicasents副本数,动态更新Pod的副本数,只支持扩容缩容
-
cronjob 周期任务管理器
-
svc services,服务入口
# 查看API资源 kubectl api-resources # 查看API版本 kubectl api-versions
-
查看资源
kubectl get 资源 -o 格式 * wide 显示详细信息 * json 以json格式显示详细信息 * yaml 以yaml格式显示详细信息 #查看pod信息 kubectl get pod -o wide kubectl get pod -o yaml kubectl get pod -o json #查看所有信息 kubectl get all #-w 等待显示资源状态的修改
创建资源
vim 01-nginx-pod.yml apiVersion: v1 kind: Pod metadata: name: nginx labels: app: web spec: hostNetwork: true containers: - name: nginx image: 192.168.57.200:8099/library/nginx:1.21 ports: - containerPort: 80
#创建资源 kubectl create -f xxx.yaml
-
删除资源
kubectl delete pod nginx -n dafault kubectl delete -f 01-nginx-pod.yml kubectl delete 资源类型 名称 -n命名空间
-
更新资源
#当资源不存储时创建资源,也可以更新资源(镜像) kubectl apply -f 01-nginx-pod.yml
-
查询资源的详细信息,运行状态,常用于排除
kubectl describe pod nginx
-
查看运行日志
kubectl logs nginx-game
-
在线更新运行中配置,yaml格式
kubectl edit pod nginx-game
-
进入容器
kubectl exe -it nginx-game -- bash
-
直接创建pod并启动容器
kubectl run --image=nginx nginx-app --port=8082 kubectl run --image=192.168.57.200:/8099/library/tomcat:8 tomcat-app --port=8080 kubectl dalete pod tomcat-app
-
双向复制
kubectl cp init.sh nginx-game:/data kubectl cp nginx-game:/data/ ./
Node节点操作
-
准备工作:
-
docker
-
系统优化
-
-
添加
-
让master生成join+tonken命令
kubeadm token create --print-join-command
-
node节点执行kubeadm join命令
systemctl start kubelet kubeadm token create --print-join-command kubeadm join 192.168.8.12:6443 --token iixae5.y2sl9rn9eoy2cbb5 --discovery-token-ca-cert-hash sha256:6d1a6db991e3eefedf6545676a9ece9c60c51d38a453363466bb9c39a07ccde7
删除:
-
master设置Node为不可调用
kubectl cordon node3
-
在master节点强制驱除node中pod
kubectl drain node3 --ignore-daemonsets --delete-emptydir-data
-
从master节点中删除节点记录
kubectl delete node node2 #查看 kubectl get node
-
清理被移除的节点
#关闭kubelet kubectl stop kubelet #重置所有k8s配置 kubeadm reset #清理残余数据:删除 etcd 数据目录和 Kubernetes 配置文件:
-
Kubernetes 中YAML
--- #yaml起始分隔作用,可以在一个文件中写多个配置 apiVersion: v1 #查看版本:kubectl api-resources |grep pods kind: Pod #k8s资源类型 metadata: #元数据,包含资源对象名称和标签 name: myapp #资源名称(自定义) labels: #标签 app: webapp info: abcd spec: #详细配置规格 containers: #容器定义 - name: web1 images: nginx:1.21 - name: mysql images:mysql:8.0. #生成yaml模板 kubectl create ns test --dry-run=client -o yaml > 05.namespace.yaml
NameSpace命名空间
资源的分组管理
资源限制,
#创建命名空间 kubectl create ns test #查看所有命名空间 kubectl get ns kubectl get ns NAME STATUS AGE default Active 7d23h kube-flannel Active 7d23h kube-node-lease Active 7d23h kube-public Active 7d23h kube-system Active 7d23h test Active 56s * default 默认命名空间,查询资源时默认显示 * kube-flannel 网络插件的命名空间 kubectl get all -n kube-flannel * kube-node-lease 是 K8s 集群中用于节点租约(Node Lease)的一个命名空间。 * kube-public 所有用户(包括未经过身份验证的用户)都可以读取。 * kube-system k8s服务的命名空间,k8s的组件 #删除命名空间,会将命名空间中的所有资源全部删除 kubectl delete ns test #指定资源的namespace apiVersion: v1 kind: Pod metadata: name: myapp labels: run: myapp namespace: test #创建资源时,指定namespace spec: containers: - image: 192.168.57.200:8099/library/nginx:1.21 imagePullPolicy: IfNotPresent name: myapp #创建pod kubectl apply -f 06.nginx-test.yaml #指定命名空间查看pod kubectl get pod -n test
资源限制:
Namespace的资源限制主要通过两种资源对象实现:
-
ResourceQuota(资源配置)
-
LimitRange(限制范围)
更多推荐



所有评论(0)