当前位置: 首页 > news >正文

Kubernetes基础概念和命令

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:快速安装k8s命令行工具

  • 初始化Master节点,全局设置

 config:指定初始化集群时使用的配置文件init:初始化Master节点join:初始化Node节点并加入集群reset:重置当前节点,无论是Master节点还是Node节点都可以重置token: kubeadm join# 打印默认初始化配置kubeadm config print init-defaults# 生成新的加入令牌kubeadm token create --print-join-command  

kubectl:K8s集群管理命令

kubectl主要职责是对资源对象进行操作。

K8s中一切皆为资源;

资源缩写说明
cluster集群
componentstatu sescs组件对象
configmapscmConfigMap对象
daemonsetsdsDaemonSet对象
deploymentsdeploy无状态服务对象,K8s最常用的控制器
endpointsep端点集合(实现同一类Pod的IP地址列表)
eventsevevents集群事件集合
ingressing访问入口
nodesno节点
namespacesns命名空间
podspo获取Pod信息
replicasetsrsPod副本数
cronjob周期性任务控制
servicessvc做负载均衡的服务入口
 # 查看API资源kubectl api-resources# 查看API版本kubectl api-versions
  • 查看资源

 kubectl get 资源 -o 格式格式: * wide 显示详细信息* json 以json格式显示详细信息* yaml 以yaml格式显示详细信息-w 等待显示资源状态的修改-n 指定命名空间
  • 创建、删除、更新资源

 # 通过YAML创建资源,需要先vim这个yaml文件#(不指定名称可以换成.,表示当前目录下所有文件)vim 资源名称------------------------apiVersion: v1kind: Podmetadata:name: nginxlabels:app: webspec:hostNetwork: truecontainers:- name: nginximage: 192.168.57.200:8099/library/nginx:latestports:- containerPort: 80------------------------kubectl create -f 资源名称​# 如果是需要换成h5-game,需要提前在节点上login并拉取镜像docker login 192.168.57.200:8099docker pull 192.168.57.200:8099/yun11/h5-game:1.0​# 删除资源kubectl delete 资源类型 名称 -n 命名空间kubectl delete -f 资源名称​# 修改或者更新资源(镜像),应用某一个资源,资源不存在时创建资源,资源存在时不进行操作,也支持修改资源(用的比create多,也可以修改)kubectl apply -f 资源名称​# 直接操作资源kubectl delete pod <pod-name>        # 删除指定Podkubectl delete pod --all             # 删除所有Podkubectl create namespace <name>      # 创建命名空间
  • 查看资源的详细信息,运行状态,常用于排错

 kubectl describe pod nginx
  • 查看运行日志,用于排错

 # 查看Pod日志kubectl logs <pod-name># 实时查看日志kubectl logs -f <pod-name> 
  • 在线更新运行中配置,yaml格式

 kubectl edit pod nginx-game
  • 进入容器进行修改

 kubectl exec -it <pod-name> -- bash
  • 直接创建pod并启动容器

 kubectl run --image=192.168.57.200:8099//镜像 镜像名 --port=8080# 举例说明kubectl run --image=192,168.57.200:8099/library/tomcat:8 tomcat-app --port=8080kubectl delete pod tomcat-app
  • 双向复制

 kubectl cp init.sh nginx-game:/datakubectl cp nginx-game:/data/.
  • 更新与回滚

 kubectl set image deployment/<name> <container>=<image>  # 更新镜像kubectl rollout undo deployment/<name>                  # 回滚部署kubectl scale deployment <name> --replicas=<number>     # 伸缩Pod数量
  • 标签管理(过滤器,筛选功能类似select)

 kubectl label nodes <node-name> <key>=<value>    # 给节点添加标签kubectl label pod <pod-name> <key>=<value>       # 给Pod添加标签kubectl label pod <pod-name> <key>-              # 删除标签

Node节点操作

  • 添加:

    • 准备工作:

      • 1.Docker

      • 2.系统优化

    • 让Master生成join+token命令

       [root@master~]# kubeadm token create --print-join-command
    • Node节点执行kubeadm join命令

       # Node节点先重启[root@node2 ~]# systemctl start kubelet# 然后再运行加入命令join...
  • 删除:

    • 在Master节点中设置Node为不可调用

       [root@master~]# kubectl cordon node2
    • 在Master节点中强制驱逐Node节点的Pod

       # 需要先删除上面的Pod,或者资源[root@master~]# kubectl drain node2 --ignore-daemonsets --delete-emptydir-data
    • 从Master节点中删除节点记录

       [root@master~]# kubectl delete node node2
    • 清理被移除的节点

       [root@node2 ~]# systemctl stop kubelet# 重置节点:清理该节点上的 Kubernetes 配置:[root@node2 ~]# kubeadm reset# 清理残余数据:删除 etcd 数据目录和 Kubernetes 配置文件:[root@node2 ~]# rm -rf /etc/cni/net.d /var/lib/kubelet /var/lib/etcd
  • 查看

 kubectl get nodekubectl describe node node2

Kubernetes中Yaml

基本语法格式

 ---                      # YAML起始分割作用,可以在一个文件中写多个配置apiVersion: v1           # 查询API版本,kubectl api-resources | grep podskind: Pod                # K8s资源类型metadata:                # 元数据,包含资源对象的名称和标签等设置name: myapp            # 资源名称,可以用来重启查看删除labels:                # 标签,筛选app: webapp          # 标签键值对info: abcdspec:                    # 容器的详细配置规格containers:            # 容器定义- name: web1           # 容器名称,第一个image: nginx:1.21    # 容器镜像- name: web2           # 第二个容器名称(如果只有一个后面就不写)image: mysql:8.0.20  # 第二个容器镜像

关键字段解析

  • apiVersion: 指定使用的Kubernetes API版本,不同资源类型使用不同版本

  • kind: 定义资源类型,如Pod、Deployment、Service等

  • metadata: 包含资源的标识信息(名称、标签、注释等)

  • spec: 描述资源的期望状态,这是最复杂的部分

  • status: 记录资源的实际状态,由Kubernetes自动生成,使用清单时通常省略

 # 查看K8S自带的资源管理帮助文档kubectl explain deployment

--dry-run生成YAML文件框架

快速生成YAML模板

Kubernetes提供了强大的模板生成功能,无需手动编写YAML。

 # 1、生成Pod模板kubectl run myapp --image=nginx:1.17 --dry-run=client -o yaml > pod.yaml# 举例:kubectl run myapp --image=nginx:1.26 --dry-run=client -o yaml > 01-nginx-pod.yaml# 查看结果cat 01-nginx-pod.yaml apiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: myappname: myappspec:containers:- image: nginx:1.26name: myappresources: {}dnsPolicy: ClusterFirstrestartPolicy: Alwaysstatus: {}​# 2、生成Namespace模板kubectl create namespace work --dry-run=client -o yaml > namespace.yaml# 举例kubectl create namespace work --dry-run=client -o yaml > 02-namespace.yaml# 查看结果cat 02-namespace.yaml apiVersion: v1kind: Namespacemetadata:creationTimestamp: nullname: workspec: {}status: {}​# 3、生成Deployment模板kubectl create deployment myapp --image=dbimg:1.35 --dry-run=client -o yaml > deployment.yaml# 举例kubectl create deployment myapp --image=nginx:1.24 --dry-run=client -o yaml > 03-nginx-deployment.yaml# 查看结果cat 03-nginx-deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata:creationTimestamp: nulllabels:app: myappname: myappspec:replicas: 1selector:matchLabels:app: myappstrategy: {}template:metadata:creationTimestamp: nulllabels:app: myappspec:containers:- image: nginx:1.24name: nginxresources: {}status: {}

资源操作命令详解

1.创建资源

 # 从YAML文件创建资源kubectl create -f myapp.yaml​# 创建多个资源kubectl create -f dir/  # 目录下所有YAML文件kubectl create -f file1.yaml -f file2.yaml

2.应用声明式配置

 # 创建或更新某个资源(推荐方式)kubectl apply -f myapp.yaml​# 查看将要应用的变更kubectl apply -f myapp.yaml --dry-run=client​# 强制替换配置kubectl replace --force -f myapp.yaml

3.删除资源

 # 删除指定资源kubectl delete -f myapp.yaml​# 删除多个资源kubectl delete -f directory/​# 基于标签删除(可能的多个pod)kubectl delete pod -l app=webapp

高级操作技巧

1. 部分更新资源(打补丁)
# 使用merge混合策略(默认是strategic策略性合并)更新标签,适用于简单字段更新
cat > patch.yaml << EOF
metadata:labels:key: myapp-value
EOFkubectl patch pod myapp --type=merge --patch-file patch.yaml# 使用JSON patch删除标签
cat > remove-label.yaml << EOF
- op: removepath: /metadata/labels/key
EOFkubectl patch pod myapp --type=json --patch-file remove-label.yaml
2. 添加注解
# 添加或更新注解
kubectl annotate pod myapp webapp="nginx.1.17" description="前端Web服务器"# 查看注解信息
kubectl describe pod myapp | grep Annotations
3. 实时编辑资源(对于改动不大的情况,使用edit更快速)
# 编辑运行中的资源
kubectl edit pod myapp# 编辑Deployment配置(编辑时会打开默认文本编辑器,修改保存后会立即生效)
kubectl edit deployment/myapp

常见问题排查

1. YAML格式错误
# 常见的格式错误
error: error parsing pod.yaml: error converting YAML to JSON: yaml: line 10: did not find expected key# 解决方法:使用YAML验证工具或在线校验器
2. 资源已存在错误
# 使用create时如果资源已存在会报错
Error from server (AlreadyExists): error when creating "myapp.yaml": pods "myapp" already exists# 解决方法:使用apply代替create,或者先删除再创建
3. 字段验证错误
# API服务器会验证字段合法性
The Deployment "myapp" is invalid: spec.template.spec.containers[0].name: Required value# 解决方法:使用kubectl explain查看字段要求

掌握Kubernetes资源清单文件的使用是容器编排的基础技能。

http://www.dtcms.com/a/572601.html

相关文章:

  • 技术干货-MYSQL数据类型详解
  • 备份工具:rsync、Tar、Borg、Veeam 备份与恢复方案
  • 深入 Pinia 工作原理:响应式核心、持久化机制与缓存策略
  • 【前端】动态插入并渲染大量数据的方法-时间分片:使用requestAnimationFrame+DocumentFragment
  • 耶鲁大学Hello Robot研究解读:人类反馈策略的多样性与有效性
  • Unity摄像机鼠标右键旋转功能
  • Spring AI Alibaba文生图实战:从零开始编写AI图片生成Demo
  • 文本编辑器做网站国外设计师
  • 网站多久电子信息工程就业方向
  • 大连网站seo顾问企业开发网站公司
  • 南京网站设计搭建公司网站怎么做rss
  • 外包做网站谷歌seo优化
  • 博物馆网站 建设方案外贸短视频营销
  • 网站如何在360做提交微信开发公司怎么样
  • 广州微网站建设信息设计图案大全
  • 苏州吴中区专业做网站郑州哪里可以做网站
  • cms网站开发毕设简述网站建设的方法
  • 怎样建立网站挣钱网站建设功能选择表
  • 郑州加盟做网站开源程序网站
  • 万维网网站注册网站线下推广怎么做
  • 郑州 网站建设:网站开发页面大小适应屏幕
  • 网络营销网站建设知识南通关键词优化软件
  • 公司网站页脚dedecms手机网站模板
  • 团购网站建设公司深圳营销型网页设计公司
  • 东莞网站建设在哪里wordpress 加载中动画
  • 慈溪市建设局网站h5免费制作平台火蚁
  • 平凉北京网站建设百度店铺免费入驻
  • wordpress termmeta怎么把网站排名优化
  • 服装企业网站内容规划企业网站建设方案教程
  • 网站建设步骤和流程ico wordpress