微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

K8S应用部署实践

命令式部署

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

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 举报,一经查实,本站将立刻删除。

相关推荐