Kubernetes: 초보자 및 혼자서 배포하는 방법

Kubernetes는 올바르게 단순화하면 매우 쉬운 일 중 하나이지만 세부 사항을 보기 시작하면 다소 어려울 수 있습니다. 지금 세부 사항에 대해 걱정하지 말고 무언가를 시작하십시오.
시작하겠습니다.
Kubernetes는 올바르게 단순화하면 매우 쉬운 일 중 하나이지만 세부 사항을 보기 시작하면 다소 어려울 수 있습니다. 지금 세부 사항에 대해 걱정하지 말고 무언가를 진행하려고 노력하십시오. 시간과 경험이 있으면 모든 것이 이해될 것입니다. :)
몇 가지 기본 "알림"먼저. 나는 당신에게 정의를 지루하게하지 않을 것입니다, 나는 당신이 그것이 무엇인지 알고 있다고 가정합니다.
Kubernetes는 여러 "핵심"리소스를 기반으로 합니다. 다른 항목(StatefulSet, LimitRange 등)을 추가할 수 있지만 다음과 같이 작업하면 다음과 같이 작동합니다.

  • 서비스. 기본적으로 포드에 대한 액세스를 정의하는 것입니다
  • .

  • 배포: 원하는 포드 및 복제본을 선언합니다(원하는 포드 수),

  • Ingress: 클러스터에서 서비스에 액세스하는 방법 관리

  • Ingress 컨트롤러: Ingress Nginx 컨트롤러
  • 를 적극 권장합니다.

  • 네임스페이스: 환경.

  • 그 위에 DNS 이름(route53 ...)과 인증서를 추가합니다.

    배포하려면 다음과 같은 "일반"단계를 따릅니다.
  • 클러스터 생성,
  • 수신 컨트롤러 및 로드 밸런서를 생성하고 DNS/인증서를 연결합니다.
  • 필요한 리소스(배포, 수신 등), 환경 및 애플리케이션에 따라 "필요한"리소스를 작성합니다.

  • 이 시리즈에서는 EKS에 중점을 둘 것입니다.

    클러스터를 만듭니다.



    콘솔, CloudFormation 및 Terraform을 사용하여 다양한 방법으로 클러스터를 생성할 수 있습니다. 나는 그 3 가지 방법을 시도했습니다. Cloudformation으로 시작한 다음 수동으로 진행한 다음 Terraform으로 진행했습니다. 저는 어떻게 작동하는지 이해해야 하는 사람이므로 TF에 가기 전에 수동으로 수행해야 합니다.
    나는 AWShttps://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html의 가이드를 따랐고 추천만 할 수 있다. 나는 처음에 어려움을 겪었다는 것을 알고 있습니다. 기억나는 몇 가지가 있습니다.
  • 동일한 VPC에 모든 것을 설치해야 합니다.
  • 당시에는 완전 개인 클러스터가 불가능했습니다. 나는 그들이 이것을 위해 노력하고 있다고 생각하지만 무언가는 항상 열려있을 것입니다. 인스턴스가 Kubernetes임을 등록해야 하기 때문이라고 생각합니다. 그러나 그것은 v1.10에 있었습니다. 상황이 바뀌었을 수도 있습니다.
  • 무언가가 작동하지 않으면 "너무 많은 포트를 열어서 작동하는지 확인한 다음 점차적으로 제한합니다"를 시도하십시오.

  • 제가 추천할 수 있는 가장 좋은 방법은 몇 번 해보는 것입니다. 어려움을 겪고 있다면 트위터에는 큰 kubernetes 커뮤니티가 있습니다. 저에게 연락 주시기 바랍니다(또는 여기 댓글로).

    인그레스 컨트롤러 및 로드 밸런서 생성



    솔직히 말해서, 이 가이드(https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes [당신은 cert-manager가 필요하지 않습니다])는 정말 간단하고 따라하기 쉽습니다.
    Ingress Controller는 기본적으로 누군가가 요청한 요청을 받아 올바른 서비스/배포로 보냅니다. nginx 수신 컨트롤러를 생성한 다음 로드 밸런서를 생성하는 것이 좋습니다. LB가 AWS에 표시되는 데 시간이 걸릴 수 있습니다.
    NLB 버전은 다음과 같습니다.

    kind: Service
    apiVersion: v1
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: #{Certificate}
        service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
        service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "ssl"
    spec:
      externalTrafficPolicy: Cluster
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      ports:
        - name: http
          port: 80
          targetPort: http
        - name: https
          port: 443
          targetPort: https
    


    필요한 리소스 쓰기



    현재 사용하고 있는 템플릿을 알려드리겠습니다. 자유롭게 수정하세요.
    시간이 지나면 환경 변수를 ConfigMap으로 이동하는 방법을 살펴볼 수 있습니다. Env는 "가장 안전한"방법은 아니지만 충분히 잘 수행합니다.
    저와 같은 포트를 사용할 필요가 없습니다. 그러나 Dockerfile에서 해당 포트를 노출해야 합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: #{Name}
      namespace: #{Namespace}
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: #{Name}
      template:
        metadata:
          labels:
            app: #{Name}
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - #{Name}
          containers:
            - name: #{Name}
              image: #{AWSAccount}.dkr.ecr.#{Region}.amazonaws.com/#{Name}:#{Number}
              env:
                - name: "something"
                  value: "something"
              ports:
                - containerPort: 80
                  name: #{ContainerPort}
    
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: #{Name}-svc
      namespace: #{Namespace}
    spec:
      ports:
        - port: 8080
          targetPort: 80
      selector:
        app: #{Name}
      type: NodePort
    
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: #{Name}
      namespace: #{Namespace}
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
        - host: #{Host}
          http:
            paths:
              - path: #{Path}(/|$)(.*)
                backend:
                  serviceName: #{Name}-svc
                  servicePort: 8080
    
    


    그리고 그것은 기본적으로 초보자 친화적인 EKS 클러스터를 위한 것입니다!
    UI 대시보드( https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html )를 설치하는 것도 좋습니다.
    즐거운 시간 보내세요!

    좋은 웹페이지 즐겨찾기