k8s命令学习
pod
pod是可以在k8s中创建和管理的、最小的可部署的计算单元
- yaml文件示例
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- 相关操作命令
# 1. 执行创建命令
kubectl apply -f nginx_pod.yaml
# 2. 查看pod资源
kubectl get pods [--namespace=NAMESPACE] [-o wide]
# 指定命名空间 默认不指定的命名空间会放在default
# -o wide 显示额外信息,如Pod的IP,节点的位置
# 3. 查看单个Pod的详细信息
kubectl describe pod POD_NAME [--namespace=NAMESPACE
# 4. 查看Pod的资源使用情况(实时监控)
kubectl top pod POD_NAME [--namespace=NAMESPACE]
# 通过 Metrics Server
# 5. 查看Pod的启动日志
kubectl logs -f POD_NAME [--namespace=NAMESPACE] -c CONTAINER_NAME
# 当存在多个容器时,可以-c选项指定容器名
# 6. 查看Pod创建时的yaml文件信息
kubectl get pod POD_NAME -o yaml [--namespace=]
# 7. 进入Pod内部操作
kubectl exec -it POD_NAME [--namespace=NAMESPACE] -- /bin/bash
# 多容器Pod指定容器名
kubectl exec -it POD_NAME -c CONTAINER_NAME -- /bin/bash
# 删除Pod
kubectl delete pod POD_NAME [--grace -period=0 --force]
# 括号中的表示强制删除
deployment
Depoloymemt通常用于管理一个应用负载的一组Pod,通常适用于不保持状态的负载
- 示例yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
说明:deployment会在集群中选取节点去创建三个Pod,每个Pod里面都是相同的服务,但是不同的Pod里面IP地址是不一样的,如果只有一个node,则都会在一个node上面创建三个相同的Pod
- 创建命令
de# 1. 创建Deployment
kubectl apply -f xxxx.yaml # yaml文件创建
kubectl create deploy nginx-deploy --image nginx # 指定命令创建
# 2. 查看Deployment
kubectl get deploy [DEPLOY_NAME -o yaml]
# 接-o yaml可以查看指定deploy的创建yaml文件
# 3. 更新Deployment
kubectl apply -f xxx.yaml # 更新yaml文件,重新应用
kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1 --record
# 4. 扩容和缩容Deployment
kubectl edit deploy nginx-deployment # 打开编辑页面,修改副本数量值
kubectl scale deploy nginx-deployment --replicas=5 #
# 5. 删除Deploy
kubectl delete deployment nginx-deployment
kubectl delete -f xxx.yaml
Kuberenetes网络模型
- 集群中的每个Pod都会获得自己的、独一无二的集群范围IP地址
Pod有自己的私有网络命名空间,同一个Pod内的不同容器进程彼此之间可以通过localhost进行通信
- Pod网络(集群网络)可以处理Pod之间的通信
所有Pod都可以与所有其他的Pod进行通信,无论是在同一个节点还是不同的节点
-
Service API 允许为一个或多个后端Pod提供一个稳定的、长期有效的IP地址或主机名,其中组成服务的各个Pod的IP可以随时变化
-
Gateway API 可以使集群外部的客户端能够访问Service
-
NetworkPolicy 是一个内置的kubernetesAPI,允许控制Pod之间的流量或者Pod与外部世界之间的流量
service
k8s中的service有很多中类型
- ClusterIP(默认类型)
这是 Service 的默认类型。它会为 Service 分配一个仅在集群内部可见的虚拟 IP(ClusterIP),使得集群内的 Pod 能够通过这个 IP 访问该 Service。此类型的 Service 无法被集群外部直接访问。
- NodePort
这种类型的 Service 会在每个节点的 IP 上开放一个固定端口(范围是 30000 - 32767),通过访问任意节点的 IP 和这个端口,就能访问到对应的 Service。它是在 ClusterIP 之上构建的,会自动创建 ClusterIP。
- LoadBalancer
该类型的 Service 会借助云提供商(像 AWS、GCP、Azure)的负载均衡器,将流量分发到 Service。它是在 NodePort 之上构建的,会自动创建 NodePort 和 ClusterIP。
- ExternalName
这种类型的 Service 不会代理任何端口,也不会分配 ClusterIP。它通过返回 CNAME 记录,将服务名直接映射到一个外部域名(由externalName字段指定)
基本命令
# 1. 创建service
kubectl expose deployment nginx-deployment --port=80 --name=nginx-service
# 2. 查看service
kubectl get service nginx-service
yaml配置文件详解
apiVersion: v1 # API版本,不同资源类型使用不同版本
kind: Pod # 资源类型(Pod, Deployment, Service等)
metadata: # 元数据,用于标识资源
name: my-pod # 资源名称
labels: # 标签,用于选择和分组资源
app: my-app
tier: frontend
spec: # 资源规范,定义期望状态
containers: # Pod中的容器列表
- name: nginx # 容器名称
image: nginx:1.14.2 # 容器镜像
ports: # 容器暴露的端口
- containerPort: 80 # 容器内部端口
2127

被折叠的 条评论
为什么被折叠?



