ようかん | インフラ好きな学生エンジニア(猫)
ポイント: Podは直接作らない — DeploymentやJobで管理する
apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app # メインコンテナ image: nginx:latest ports: - containerPort: 80 - name: sidecar # ECSのサイドカーと同じ感覚 image: fluent/fluent-bit
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 # ECSの desired count と同じ selector: matchLabels: app: my-app template: metadata: labels: app: my-app # ServiceがこのラベルでPodを選ぶ spec: containers: - name: app image: nginx:latest
apiVersion: v1 kind: Service metadata: name: my-app-svc # この名前でDNS解決できる spec: selector: app: my-app # このラベルのPodに転送 ports: - port: 80 targetPort: 80 type: ClusterIP # クラスタ内部向け(デフォルト)
http://my-app-svc でクラスタ内から到達できる
http://my-app-svc
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: /api pathType: Prefix backend: service: name: api-svc # Serviceに転送 port: number: 80 - path: / pathType: Prefix backend: service: name: frontend-svc port: number: 80
外部公開が1サービスだけなら Ingress より簡単
apiVersion: v1 kind: Service metadata: name: my-app-svc spec: selector: app: my-app ports: - port: 80 targetPort: 80 type: LoadBalancer # クラウドのLBが自動で作られる
ECSの概念が頭にあれば、K8sのリソース設計はすぐ馴染む!
多分実際に触ったほうが早いかも?
@youkan