K8S应用部署实践
一个Serivce下面包含的Pod集合一般是由Label Selector来决定的。⑧ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。其中标签与上方解释基本相同 ,port 是对外暴露的端口,targetPort是容器端口 一般会设置成一样。③ metadata 是该资源的元数据,name 是必需的元数据项。⑥ template 定义
命令式部署
最简单的部署方式只需要一行语句
kubectl create deployment kubernetes-bootcamp --image=镜像
它能帮我们自动寻找可用节点并部署镜像
通过kubectl get deployment 可以查看运行的结果
声明文件
命令部署不方便管理,另外一种主流的部署方式是通过yaml文件
Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
# 部署名字
name: test
spec:
replicas: 2
# 用来查找关联的 Pod,所有标签都匹配才行
selector:
matchLabels:
app: test
# 定义 Pod 相关数据
template:
metadata:
labels:
app: test
spec:
# 定义容器,可以多个
containers:
- name: test # 容器名字
image: # 镜像
对这个yaml文件进行简单的解释:
① apiVersion 是当前配置格式的版本。
② kind 是要创建的资源类型,这里是 Deployment。
③ metadata 是该资源的元数据,name 是必需的元数据项。
④ spec 部分是该 Deployment 的规格说明。
⑤ replicas 指明副本数量,默认为 1。
⑥ template 定义 Pod 的模板,这是配置文件的重要部分。
⑦ metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑧ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
使用kubectl apply -f < name>来部署
Deployment不具有负载均衡,也不对外暴露端口。Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。K8s可以为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。一个Serivce下面包含的Pod集合一般是由Label Selector来决定的。
定义yaml:
apiVersion: v1
kind: Service
metadata:
name: test-k8s
spec:
selector:
app: test-k8s
# 默认 ClusterIP 集群内可访问,NodePort 节点可访问,LoadBalancer 负载均衡模式(需要负载均衡器才可用)
type: NodePort
ports:
- port: 8080 # 本 Service 的端口
targetPort: 8080 # 容器端口
nodePort: 31000 # 节点端口,范围固定 30000 ~ 32767
其中标签与上方解释基本相同 ,port 是对外暴露的端口,targetPort是容器端口 一般会设置成一样
同样使用kubectl apply -f < name>来部署
报错与解决
1.pod 一直为ContainerCreating状态
解决方法:
使用命令
kubectl describe pod
查看pod 状态,发现报错open /run/flannel/subnet.env: no such file or directory
在每个节点对应位置创建subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
重新部署pod后解决
更多推荐
所有评论(0)