命令式部署

最简单的部署方式只需要一行语句

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后解决
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐