命令式部署
最简单的部署方式只需要一行语句
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后解决
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。