容器编排 - K8s - 配置文件参数说明和基础命令

文章目录

  • [1. 简单搭建一个K8s](#1. 简单搭建一个K8s)
  • [2. k8s配置文件参数说明](#2. k8s配置文件参数说明)
  • [3. kubectl - 基本命令](#3. kubectl - 基本命令)
  • [4. dashboard - k8s界面端工具](#4. dashboard - k8s界面端工具)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文只是简单了解一下k8s简单知识,详细的话可以查看官方文档等

本文开始:主要是了解一下搭建k8s, k8s文件具体配置参数说明,简单的kubectl命令;

测试人员简单了解一下,当遇到真正的分布式测试业务,可以进一步了解更多;

1. 简单搭建一个K8s

  1. kubeadm:是 k8s 集群的安装工具-官方
  2. kubectl:k8s 的命令行工具,后续都使用使用这个命令与 k8s 通信
  3. kubelet:可以理解为 k8s 在每个节点上启动的 agent,它负责维护当前节点的状态和节点上启动的所有容器的维护工作。 由于它不能够被容器化部署,所以必须手动下载。

搭建k8s方式:

https://www.kubernetes.org.cn/7189.html

【注】部署K8s,环境影响很大,会出现各种问题,实际遇到还需要具体解决,这里简单了解一下;

初始化操作:

初始化文件配置

bash 复制代码
kubeadminit \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version 
v1.13.3 \--pod-network-cidr=10.244.0.0/16

初始化网络

bash 复制代码
kubectl apply -f 
https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/D
ocumentation/kube-flannel.yml

2. k8s配置文件参数说明

下述是一个完整的 Kubernetes(K8s)Deployment + Service 的 YAML 配置示例

看懂下述文件需要先了解:Pod, service, deployment,探针等基础

yaml 复制代码
# =============== API 版本与资源类型 ===============
apiVersion: apps/v1     # 使用 apps/v1 API(Deployment 所属的 API 组)
kind: Deployment        # 资源类型:Deployment(用于管理 Pod 副本和滚动更新)

# =============== 元数据(Metadata)===============
metadata:
  name: my-app           # Deployment 的名称(在命名空间内唯一)
  namespace: default     # 所属命名空间(可省略,默认为 default)
  labels:                # 标签(用于标识和选择资源)
    app: my-app          # 自定义标签,通常用于关联 Service 和 Pod

# =============== 期望状态(Spec)===============
spec:
  replicas: 3          # 期望运行的 Pod 副本数(高可用/负载均衡)
  selector:            # 标签选择器:用于匹配由该 Deployment 管理的 Pod
    matchLabels:
      app: my-app      # 必须与 template.metadata.labels 中的标签一致

  # =============== Pod 模板 ===============
  template:                  # 定义 Pod 的模板(Deployment 会基于此创建 Pod)
    metadata:
      labels:
        app: my-app        # Pod 的标签,必须与上面 selector.matchLabels 一致
    spec:                  # Pod 的规格
      containers:          # 容器列表(一个 Pod 可包含多个容器,但通常一个主应用)
        - name: my-app-container    # 容器名称(在同一 Pod 内唯一)
          image: nginx:1.25         # 镜像地址(格式:[registry/][repo]/image:tag)
          imagePullPolicy: IfNotPresent  # 镜像拉取策略:
                                     #   Always(总是拉取)、
                                     #   Never(从不拉取,仅本地)、
                                     #   IfNotPresent(本地没有才拉取,默认)

          ports:                    # 容器暴露的端口(仅声明,不发布到宿主机)
            - containerPort: 80     # 容器内部监听的端口
              protocol: TCP         # 协议(TCP/UDP,默认 TCP)

          env:                      # 指定环境变量(注入到容器中)
            - name: ENV             # 变量名
              value: "production"   # 变量值(明文)
            - name: DB_PASSWORD
              valueFrom:            # 从 Secret 获取敏感信息(推荐方式)
                secretKeyRef:
                  name: db-secret   # 引用的 Secret 名称
                  key: password     # Secret 中的键名

          resources:                # 资源请求与限制(影响调度和 QoS)
            requests:               # 请求的最小资源(调度依据)
              memory: "64Mi"        # 内存(单位:Mi=MiB, Gi=GiB)
              cpu: "250m"           # CPU(单位:m=毫核,1000m = 1 核)
            limits:                 # 允许使用的最大资源(超限可能被 OOM kill)
              memory: "128Mi"
              cpu: "500m"

          livenessProbe:            # 存活探针:判断容器是否"活着",失败则重启
            httpGet:
              path: /healthz        # HTTP 探测路径
              port: 80              # 探测端口
            initialDelaySeconds: 10 # 启动后多少秒开始探测
            periodSeconds: 15       # 探测间隔(秒)
          readinessProbe:           # 就绪探针:判断容器是否"准备好接收流量"
            httpGet:
              path: /ready
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 10

          volumeMounts:             # 将卷挂载到容器内的路径
            - name: config-volume   # 卷名称(需在 volumes 中定义)
              mountPath: /etc/nginx # 容器内挂载路径
              readOnly: true        # 是否只读

      volumes:                      # 定义卷(Pod 级别,可被多个容器共享)
        - name: config-volume       # 卷名称
          configMap:                # 卷类型:ConfigMap(用于非敏感配置)
            name: nginx-config      # 引用的 ConfigMap 名称

      restartPolicy: Always         # 容器退出时的重启策略(Deployment 下只能是 Always)
      terminationGracePeriodSeconds: 30  # 优雅终止宽限期(秒),收到 SIGTERM 后等待时间

---
# =============== Service 资源(暴露应用)===============
apiVersion: v1
kind: Service
metadata:
  name: my-app-service            # Service 名称
  #namespace: default
  labels:
  	name: my-app-container
spec:
  type: NodePort                 # Service 类型:
                                  #   ClusterIP(集群内访问,默认)、
                                  #   NodePort(通过节点 IP:端口访问)、
                                  #   LoadBalancer(云厂商 LB)、
                                  #   ExternalName(DNS 映射)
  ports:
    - port: 80                    # Service 监听的端口 
      targetPort: 80              # 转发到 Pod 的 containerPort(容器端口号)
      nodePort: 31200             # 节点端口      protocol: TCP
  selector:                       # 选择哪些 Pod 提供服务(匹配 Pod 的 labels)
    app: my-app                   # 必须与 Pod 的 label 一致

3. kubectl - 基本命令

kubectl 类似 docker命令

K8S 中一切皆资源 , 可以理解为在 K8S 中资源是用来描述容器的行为的,所有的资源都是在某个维度控制如何运行容器。

比如 :

pod 描述的是容器之间如何连接在一起,

config map 是用来将外部的配置文件挂载到容器中为应用程序提供配置管理的

Service 是用来接管容器网络的

Role,RoleBinding 和 Service account 是用来控制容器的角色和权限的。

kubectl命令模式:

kubectl [动作] [资源] [option]

bash 复制代码
kubectl [get/describe/delete] [pod/deployment/svc] -n [命名空间] -o [yaml/json/wide]

option参数说明:

-o::用来对输出信息进行格式化

-n:指定命名空间

-l:指定只查询拥有对应的 label 的资源对象

--all-namespaces :操作整个集群所有名称空间下的资源

示例

bash 复制代码
# 查看所有pods
kubectl get pods
# 查看某个命名空间下所有 Pod 
kubectl get pods -n kube-system
# 删除某个命名空间
kubectl delete ns [命名空间名称]
# 查看某个 Pod 的资源对象的详情
kubectl describe pod [pod名称]
# 删除在名称空间 test 中的一个名字叫 jenkins 的 pod
kubectl delete pod jenkins -n test
# 只查询拥有对应的 label 的资源对象
kubectl get pods -l app=nginx-web

不写命名空间,有默认default

bash 复制代码
# 查看节点
kubectl get nodes
# 列出集群中所有的命名空间,ns是namespace缩写
kubectl get ns
# 查看具体节点信息
kubectl describe nodes [node名称]

查看pod日志

bash 复制代码
kubectl logs -f [pod名称]
# 指定查看某个pod日志
kubectl logs -f [pod名称] -c [容器名称]

进入容器内

bash 复制代码
kubuctl exec -it [pod名称] -c [容器名称] bash

创建资源-使用配置文件

bash 复制代码
# 根据某个配置文件,创建资源对象
kubectl create -f [配置文件路径]
kubectl create -f [xx.yaml]
# 根据某个配置文件,更新资源对象/刷新配置文件 -推荐使用
kubectl apply -f [配置文件路径]
kubectl apply -f [xx.yaml]
# 根据某个配置文件删除资源对象
kubectl delete -f [配置文件路径]

一般一个pod启动在一个节点

污点意思:不会让pod调度该节点,其他pod不会在这个节点上部署;

删除污点

taint: 给某个 Node 增加或者删除污点。

bash 复制代码
kubectl taint nodes [节点名称] node-role.kubernetes.io/master:NoSchedule-

小结:

get: 查询某个资源列表

describe:查看某个资源对象的详情。

edit:实时编辑某个资源的配置文件

4. dashboard - k8s界面端工具

可以参考他人问题,不再重复造轮子;

【注】客户端工具不推荐,只有命令行能够获取需要的信息,这里只是了解一下;

安装客户端界面工具:
https://zhuanlan.zhihu.com/p/99148477


总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
五VV3 小时前
【ESP32】SP3手柄与ESP32连接不上问题解决
经验分享·学习
LaughingZhu3 小时前
Product Hunt 每日热榜 | 2026-01-31
大数据·人工智能·经验分享·搜索引擎·产品运营
写点什么呢3 小时前
Ltspice_安装与使用
学习·测试工具
雾岛听蓝4 小时前
C++11 列表初始化与右值引用核心解析
开发语言·c++·经验分享
LCG米4 小时前
基于PyTorch的TCN-GRU电力负荷预测:从多维数据预处理到Docker云端部署
pytorch·docker·gru
掘根5 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
Warren985 小时前
接口测试理论
docker·面试·职场和发展·eureka·ansible
杭州杭州杭州5 小时前
Docker
运维·docker·容器
一体化运维管理平台6 小时前
容器监控难题破解:美信监控易全面支持K8s、Docker
云原生·容器·kubernetes