Pod、Deployment、Service(未完成)
Pod、Deployment、Service 基础使用说明(未完成)
说明
- Pod
- 可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元
- Deployment
- 为 Pod 和 ReplicaSet 提供声明和更新能力
- 服务(Service)
- 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法
配置
创建简单的 pod
shell
cat > simple-pod.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: simple-pod-1
spec:
containers:
- name: nginx
# 在拉取镜像时的策略
# IfNotPresent:默认值,如果选择 IfNotPresent,可缺省 imagePullPolicy。创建容器时,只在本地不存在该镜像时才去拉取。提高容器启动的速度和效率,特别适用于频繁启动和停止的场景。
# Always:无论本地是否已存在该镜像,容器都会尝试去拉取最新的镜像。
# Never:容器将不会去拉取该镜像,仅依赖于本地已存在的镜像。如果本地不存在该镜像,则容器无法成功启动。
imagePullPolicy: IfNotPresent
image: nginx:1.25.1
ports:
- containerPort: 80
EOF
cat simple-pod.yaml
kubectl apply -f simple-pod.yaml
# 或者 kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
获取所有的 pod 信息 | kubectl get pod --all-namespaces -o wide |
---|---|
实时获取所有的 pod 信息 | kubectl get pod --all-namespaces -o wide -w |
获取名称为 nginx 的 pod 信息 | kubectl get pod nginx -o wide |
进入名称为 nginx 的 pod 内部 | kubectl exec -it nginx bash |
查看名称为 nginx 的 pod 描述(创建过程) | kubectl describe pod nginx |
删除名称为 nginx 的 pod | kubectl delete pod nginx |
创建简单的 Deployment
shell
cat > simple-deployment.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-deployment-1
labels:
app: simple-deployment-1
spec:
replicas: 2
selector:
matchLabels:
app: simple-deployment-1
template:
metadata:
labels:
app: simple-deployment-1
spec:
containers:
- name: nginx
# 在拉取镜像时的策略
# IfNotPresent:默认值,如果选择 IfNotPresent,可缺省 imagePullPolicy。创建容器时,只在本地不存在该镜像时才去拉取。提高容器启动的速度和效率,特别适用于频繁启动和停止的场景。
# Always:无论本地是否已存在该镜像,容器都会尝试去拉取最新的镜像。
# Never:容器将不会去拉取该镜像,仅依赖于本地已存在的镜像。如果本地不存在该镜像,则容器无法成功启动。
imagePullPolicy: IfNotPresent
image: nginx:1.25.0
ports:
- containerPort: 80
EOF
cat simple-deployment.yaml
kubectl apply -f simple-deployment.yaml
# 或者 https://raw.githubusercontent.com/kubernetes/website/main/content/zh-cn/examples/controllers/nginx-deployment.yaml
获取所有的 deployment 信息 | kubectl get deployment --all-namespaces -o wide |
---|---|
获取名称为 nginx-deployment 的 deployment 信息 | kubectl get deployment nginx-deployment -o wide |
查看名称为 nginx-deployment 的 deployment 描述(创建过程) | kubectl describe deployment nginx-deployment |
删除名称为 nginx-deployment 的 deployment | kubectl delete deployment nginx-deployment |
创建简单的 Pod、Service
shell
cat > simple-pod-service.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: simple-pod-2
labels:
app: simple-pod-2
spec:
containers:
- name: nginx
# 在拉取镜像时的策略
# IfNotPresent:默认值,如果选择 IfNotPresent,可缺省 imagePullPolicy。创建容器时,只在本地不存在该镜像时才去拉取。提高容器启动的速度和效率,特别适用于频繁启动和停止的场景。
# Always:无论本地是否已存在该镜像,容器都会尝试去拉取最新的镜像。
# Never:容器将不会去拉取该镜像,仅依赖于本地已存在的镜像。如果本地不存在该镜像,则容器无法成功启动。
imagePullPolicy: IfNotPresent
image: nginx:1.24.0
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: simple-pod-service
spec:
selector:
app: simple-pod-2
ports:
- name: name-of-service-port
protocol: TCP
port: 80
targetPort: 80
nodePort: 32332
type: NodePort
EOF
cat simple-pod-service.yaml
kubectl apply -f simple-pod-service.yaml
# 访问 http://k8s宿主机IP:32332
以下命令中的 service
被简写为 svc
获取所有的 Service 信息 | kubectl get svc --all-namespaces -o wide |
---|---|
获取名称为 service-deployment 的 deployment 信息 | kubectl get svc nginx-service -o wide |
查看名称为 service-deployment 的 deployment 描述 | kubectl describe svc nginx-service |
删除名称为 service-deployment 的 deployment | kubectl delete svc nginx-service |
创建简单的 Deployment、Service
shell
cat > simple-deployment-service.yaml << EOF
# https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
# 创建 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
# Deployment 名称
name: simple-deployment-2
# 命名空间
# namespace: xuxiaowei-cloud
spec:
selector:
matchLabels:
app: simple-deployment-2
replicas: 2
template:
metadata:
labels:
app: simple-deployment-2
spec:
containers:
- name: nginx
# 在拉取镜像时的策略
# IfNotPresent:默认值,如果选择 IfNotPresent,可缺省 imagePullPolicy。创建容器时,只在本地不存在该镜像时才去拉取。提高容器启动的速度和效率,特别适用于频繁启动和停止的场景。
# Always:无论本地是否已存在该镜像,容器都会尝试去拉取最新的镜像。
# Never:容器将不会去拉取该镜像,仅依赖于本地已存在的镜像。如果本地不存在该镜像,则容器无法成功启动。
imagePullPolicy: IfNotPresent
# https://hub.docker.com/_/nginx
# Nginx 版本
image: nginx:1.23.4
ports:
# 容器开放的端口号
- containerPort: 80
volumeMounts:
# 挂载主机的时区文件
- name: time-zone
mountPath: /etc/localtime
# https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/
# 配置挂载的数据卷
volumes:
# 挂载主机的时区文件
- name: time-zone
hostPath:
path: /etc/localtime
---
# https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/
# 创建 Service
apiVersion: v1
kind: Service
metadata:
# Service 名称
name: simple-deployment-service
# 命名空间
# namespace: xuxiaowei-cloud
spec:
ports:
# NodePort:集群外部对 Service 访问使用的端口(默认范围:30000~32767)
# port:Service 内部的端口号
# targetPort:暴露的 Deployment 中容器的端口号
# protocol:端口协议,TCP 或 UDP
# name:仅在存在多个配置时需要填写,如果填写,必须使用字符串(数字需要添加引号)
- nodePort: 30080
port: 80
protocol: TCP
targetPort: 80
selector:
# 将 Service 和 Deployment 关联起来
app: simple-deployment-2
# NodePort 会将该 Service 暴露到整个集群中的节点上,让外部客户端可以通过节点 IP + NodePort 的方式来访问该 Service
# 还有 ClusterIP 和 LoadBalancer 类型,具体可参考文档
type: NodePort
EOF
cat simple-deployment-service.yaml
kubectl apply -f simple-deployment-service.yaml