容器编排 - 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


总结

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

相关推荐
智者知已应修善业15 分钟前
【51单片机4个IO实现16按键可扩展独立按键64矩阵驱动显示矩阵原值】2023-5-8
c++·经验分享·笔记·算法·51单片机
久菜盒子工作室11 小时前
高等教育学|第一章高等教育概述
经验分享·笔记·课程设计
庆苏_13 小时前
VitePress适合做个人博客或网站吗?
经验分享·网站制作·开发框架·vitepress·字体制作
掘根14 小时前
【微服务即时通讯项目】系统联调
微服务·云原生·架构
wwj888wwj14 小时前
Docker基础(复习)
java·linux·运维·docker
guoluashuichuli14 小时前
锅水氯离子蒸汽冷凝水氯根锅炉给水氯根指标检测的目的及氯离子超标需要注意的六个问题
经验分享·科技
Luminbox紫创测控15 小时前
太阳光模拟器在汽车智能玻璃的运用
测试工具·汽车
DONG99915 小时前
配置docker代理
docker·容器
怎么就重名了15 小时前
docker可以动态修改端口映射吗
运维·docker·容器
卡梅德生物科技小能手16 小时前
生物制药靶点深度解析:CD37(四跨膜蛋白)的作用机制与药物研发技术前沿
经验分享·深度学习·生活