Kubernetes个人笔记(kubernetes Quick Hands-On)
Kubectl快速实战
kubectl是Kubernetes的“瑞士军刀”,使用kubectl通过连接API Server完成对集群的所有交互。深入探索之前,需要先了解其常用命令。
kubectl官方使用文档:https://kubernetes.io/zh-cn/docs/reference/kubectl/
1.Kubectl基础命令
Hands-ON:
# 查看kubectl客户端版本
kubectl version
# 查看集群状态
kubectl cluster-info
# 查看集群所有节点
kubectl get nodes
实用技巧:
#设置别名
alias k=kubectl
# 启用自动补全
source <(kubectl completion bash)
2.Namespace
Namespace(命名空间)用于进行资源的逻辑隔离。
核心概念:
- 默认namespace:default(未指定时使用)
- 系统namespace:kube-system(系统组件)、kube-public(公共资源)
- 逻辑隔离优势:不同namespace的资源可以同名不冲突
Hands-On:
# 查看所有namespace
kubectl get ns
# 简写了kubectl get namespace
# 创建namespace
kubectl create ns my-ns
# 查看特定namespace的资源
kubectl get pods -n my-ns
kubectl get all -n my-ns
# 切换到某个namespace
kubectl config set-context --current --namespace=my-ns
# 之后所有命令默认在该namespace执行
# 删除namespace
kubectl delete ns my-ns
# 这么做会将该namespace下的资源一并删除
# 查看当前所在的namespace
kubectl config view --minify | grep namespace:
YAML示例:
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: my-ns
# 通过YAML创建
kubectl apply -f namespace.yaml
3.Pod
Pod是Kubernetes的最小调度单元,一个Pod包含一个或多个容器(通常是一个)。
核心特点:
- 共享网络:Pod中容器共享IP和端口资源
- 共享存储:Pod中容器可共享存储
- 生命周期:Pod是最小创建和销毁的单位
Hands-On:
# 查看所有Pod
kubectl get pods
kubectl get pods -A # 查看所有namespace的Pod
# 查看Pod详情信息
kubectl describe pod nginx-pod
# 查看Pod日志
kubectl logs nginx-pod
kubectl logs -f nginx-pod #实时查看(-f)
# 进入Pod容器
kubectl exec -it nginx-pod -- /bin/bash
kubectl exec nginx-pod -- ls / #执行单个命令
# 创建临时Pod
kubectl run nginx-pod --image=nginx --restart=Never
# 删除Pod
kubectl delete pod nginx-pod
状态说明:
kubectl get pods
- Running:正常运行
- Pending:等待调度
- ContainerCreating:正在创建容器
- CrashLoopBackOff:容器反复崩溃
- ImagePullBackOff:镜像拉取失败
YAML示例:
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
# 创建Pod
kubectl apply -f pod.yaml
# 查看Pod
kubectl get pods
kubectl describe pod nginx-pod
# 测试访问
kubectl port-forward nginx-pod 8080:80
# 浏览器访问 http://localhost:8080
4.Deployment
Deployment是Pod的控制器,用于管理多个Pod的多个副本和更新策略。
核心特点:
- 副本管理:确保指定数量的Pod副本运行
- 滚动更新:无中断更新应用版本
- 版本回滚:一键回退至历史版本
Hands-On
# 创建Deployment
kubectl create deployment <name> --image=<image>
# 示例:kubectl create deployment nginx --image=nginx:alpine
# 查看Deployment
kubectl get deployments
kubectl get deploy # 简写
# 查看关联的Pod
kubectl get pods -l app=<deployment-name>
# 扩容/缩容
kubectl scale deployment <name> --replicas=3
# 更新镜像(触发滚动更新)
kubectl set image deployment <name> <container>=<new-image>
# 示例:kubectl set image deployment nginx nginx=nginx:alpine
# 查看更新状态
kubectl rollout status deployment <name>
# 版本回滚
kubectl rollout undo deployment <name>
# 删除Deployment
kubectl delete deployment <name>
YAML示例
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
# 所有这些修改都只需要重新apply:
spec:
replicas: 5 # ✓ 副本数
template:
spec:
containers:
- name: nginx
image: nginx:1.22 # ✓ 镜像版本
resources: # ✓ 资源限制
limits:
memory: "256Mi"
env: # ✓ 环境变量
- name: DEBUG
value: "true"
ports: # ✓ 端口
- containerPort: 8080
livenessProbe: # ✓ 健康检查
httpGet:
path: /health
# 应用配置
kubectl apply -f deployment.yaml
# 查看创建的资源
kubectl get deploy,rs,pod
# 会看到:Deployment -> ReplicaSet -> Pod 三层结构
不知道YAML文件的格式,可以通过kubectl edit deploy nginx查看默认生成的模板。
5.Service
Service为Pod提供稳定的网络访问,实现服务发现和负载均衡。
Service类型:
| 类型 | 用途 | 访问方式 |
|---|---|---|
| ClusterIP (默认) | 集群内部访问 | 集群内IP |
| NodePort | 外部访问节点 | 节点IP:端口 |
| LoadBalancer | 云服务负载均衡 | 云厂商LB IP |
| ExternalName | 外部服务别名 | DNS别名 |
基本命令
# 查看所有Service
kubectl get svc
kubectl get services
# 创建Service(ClusterIP)
kubectl expose deployment <deployment-name> --port=<service-port> --target-port=<pod-port>
# 创建Service(NodePort)
kubectl expose deployment <deploy-name> --type=NodePort --port=80
# target-port不指定时,默认与port一致
# 查看Service详情
kubectl describe svc <service-name>
# 查看Service的Endpoint(后端Pod)
kubectl get endpoints <service-name>
# 删除Service
kubectl delete svc <service-name>
YAML示例(ClusterIP)
# nginx-clusterip.yaml (最常用)
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
app: nginx # 选择器:匹配Pod的标签
ports:
- name: http
port: 80 # Service端口
targetPort: 80 # Pod内容器端口
type: ClusterIP # 默认类型,可不写
YAML示例(NodePort)
# nginx-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
app: nginx # 选择器:匹配Pod的标签
ports:
- name: http
port: 80 # Service端口
targetPort: 80 # Pod内容器端口
nodePort: 30001 # Service暴露在宿主机上的端口,可选范围30000-32767
type: NodePort
6.Volume
Volume 是 Kubernetes 为 Pod 提供的存储抽象,允许容器通过文件系统访问和持久化数据。
Volume类型核心概念
| Volume类型 | 概念 | 存储位置 |
|---|---|---|
| emptyDir | Pod临时存储空间 | 节点本地临时目录 |
| hostPath | 节点文件系统路径挂载 | 节点指定路径 |
| configMap | 配置数据文件化挂载 | K8s etcd集群存储 |
| secret | 加密数据文件化挂载 | K8s etcd加密存储 |
| NFS | 网络文件系统挂载 | 远程NFS服务器 |
| PVC | 持久化存储卷声明 | 云存储/网络存储系统 |
在云原生架构中,应用应尽可能保持无状态(Stateless),将数据存储至外部服务(如数据库、缓存、对象存储等)。Volume 主要用于特定场景:
- 有状态应用的数据持久化(数据库、中间件)
- 配置文件、密钥的统一管理
- 临时文件处理或节点级数据访问
如需深入学习Volume的详细配置,参考:https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/
7.ConfigMap
ConfigMap是Kubernetes中用来存储非敏感配置数据的API对象。将环境配置信息和容器镜像解耦,便于应用配置的修改。
ConfigMap使用方式:
- 环境变量
- 配置文件挂载
- 命令行参数方式
Hands-On
# 创建ConfigMap
kubectl create cm nginx-config \
--from-literal=key1=value1 \ # 字面值创建
--from-literal=key2=value2 \
--from-file=nginx.conf \ # 从文件创建
--from-file=configs/ # 从目录创建(目录下所有文件)
# 查看ConfigMap
kubectl get configmaps
# 可以简写为kubectl get cm
# 查看详情
kubectl describe configmap nginx-config
# 查看YAML
kubectl get cm nginx-config -o yaml
# 使用ConfigMap(环境变量方式)
kubectl set env deployment/nginx --from=configmap/nginx-config
# 删除ConfigMap
kubectl delete cm nginx-config
8.Secret
Secret 是 Kubernetes 中用于存储和管理敏感信息的对象,如密码、OAuth 令牌、SSH 密钥等。
Secret使用方式:
- 环境变量
- 配置文件挂载
Secret类型:
| 类型 | 命令 | 用途 |
|---|---|---|
| generic | create secret generic | 通用键值对(默认) |
| tls | create secret tls | TLS 证书和私钥 |
| docker-registry | create secret docker-registry | Docker 镜像仓库认证 |
Hands-On
# 创建Secret
# 方式1:从字面值创建(通用类型)
kubectl create secret generic db-secret \
--from-literal=username=admin \
--from-literal=password='P@ssw0rd!'
# 方式2:从文件创建
kubectl create secret generic tls-secret \
--from-file=tls.crt=./cert.pem \
--from-file=tls.key=./key.pem
# 方式3:TLS 类型(专用)
kubectl create secret tls web-tls \
--cert=./cert.pem \
--key=./key.pem
# 方式4:Docker 注册表认证
kubectl create secret docker-registry regcred \
--docker-server=registry.example.com \
--docker-username=admin \
--docker-password=secret
# 查看Secret(内容隐藏)
kubectl get secret
# 查看详情(不显示具体值)
kubectl describe secret db-secret
# 使用Secret(环境变量方式)
kubectl set env deployment/myapp --from=secret/db-secret
9.Ingress
Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。
Ingress架构流程:

注意:Ingress Controller也要通过LoadBalancer Service去连接外部负载均衡器。
Ingress的核心价值:用一个统一的"前台Service"代理所有后端的"业务Service",实现智能路由和成本优化。
更多推荐
所有评论(0)