Skip to content

016规范后的K8sYaml

参考 007 节进行改造

namespace

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: daily

statefulset

yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pod-daily-cutejava-tiny-service
  namespace: daily
spec:
  # 用于创建一个Headless服务,这个服务将提供每个Pod的稳定网络标识符
  serviceName: endpoint-daily-cutejava-tiny-service
  replicas: 2
  selector:
    matchLabels:
      app: pod-daily-cutejava-tiny-service
  template:
    metadata:
      labels:
        app: pod-daily-cutejava-tiny-service
    spec:
      containers:
        - name: pod-daily-cutejava-tiny-service
          image: easzlab.io.local:5000/cutejava-starter:version_20240521195715
          ports:
            - containerPort: 12800

service(四层负载)

yaml
apiVersion: v1
kind: Service
metadata:
  name: endpoint-daily-cutejava-tiny-service
  namespace: daily
spec:
  selector:
    app: pod-daily-cutejava-tiny-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 12800
  type: ClusterIP

ingress(七层负载,这里演示的是集群内部域名)

yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-cutejava-tiny-service
  namespace: daily
spec:
  # 指定实现规则的应用类型,controller会将以上的规则转变为适合该应用的配置写入应用的配置文件中
  ingressClassName: nginx
  # 配置代理规则
  rules:
    # 配置反向代理的域名
    - host: cutejava-tiny-service.daily.vpc.odboy.com
      http:
        paths:
          # 匹配路径,相当于nginx location,以下的pathType用于配置匹配规则
          - path: /
            # 用于指定 Ingress 路由规则中的路径类型,pathType 字段有三个可选值,Exact表示 Ingress 规则中的路径必须与请求的路径完全匹配,Prefix表示 Ingress 规则中的路径必须是请求路径的前缀,ImplementationSpecific表示 Ingress 控制器可以自行决定路径类型
            pathType: Prefix
            # 配置需要代理服务的参数
            backend:
              service:
                # 配置需要代理的sevice服务的名称。即service的 metadata.name
                name: endpoint-daily-cutejava-tiny-service
                port:
                  # 配置需要代理的service监听端口
                  number: 12800

合三为一 cutejava-tiny-service.daily.yaml

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: daily
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pod-daily-cutejava-tiny-service
  namespace: daily
spec:
  serviceName: endpoint-daily-cutejava-tiny-service
  replicas: 2
  selector:
    matchLabels:
      app: pod-daily-cutejava-tiny-service
  template:
    metadata:
      labels:
        app: pod-daily-cutejava-tiny-service
    spec:
      containers:
        - name: pod-daily-cutejava-tiny-service
          image: easzlab.io.local:5000/cutejava-starter:version_20240521195715
          ports:
            - containerPort: 12800
---
apiVersion: v1
kind: Service
metadata:
  name: endpoint-daily-cutejava-tiny-service
  namespace: daily
spec:
  selector:
    app: pod-daily-cutejava-tiny-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 12800
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-cutejava-tiny-service
  namespace: daily
spec:
  ingressClassName: nginx
  rules:
    - host: cutejava-tiny-service.daily.vpc.odboy.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: endpoint-daily-cutejava-tiny-service
                port:
                  number: 12800

执行脚本

删除原服务,这里我们只要删除namespace,其他和namespace有关的都会删除

shell
kubectl delete -f namespace.yaml

dele1.png

部署新服务

install1.png

shell
kubectl apply -f cutejava-tiny-service.daily.yaml

install2.png

配置CoreDNS

shell
kubectl edit configmaps -n kube-system coredns

install3.png

重建CoreDNS

install4.png

进入pod内测试

shell
kubectl exec -it pod-daily-cutejava-tiny-service-1 -n daily bash
curl http://cutejava-tiny-service.daily.vpc.odboy.com

install5.png