文章目录
- [1. 简单搭建一个K8s](#1. 简单搭建一个K8s)
- [2. k8s配置文件参数说明](#2. k8s配置文件参数说明)
- [3. kubectl - 基本命令](#3. kubectl - 基本命令)
- [4. dashboard - k8s界面端工具](#4. dashboard - k8s界面端工具)
- 总结
✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。

本文只是简单了解一下k8s简单知识,详细的话可以查看官方文档等
本文开始:主要是了解一下搭建k8s, k8s文件具体配置参数说明,简单的kubectl命令;
测试人员简单了解一下,当遇到真正的分布式测试业务,可以进一步了解更多;
1. 简单搭建一个K8s
- kubeadm:是 k8s 集群的安装工具-官方
- kubectl:k8s 的命令行工具,后续都使用使用这个命令与 k8s 通信
- 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
总结
✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

