Kubernetes 배우기(2)~Pod 만들기

10779 단어 kubernetesDocker

개요


지난번에서 쿠베르네츠의 집단을 구축했기 때문에 먼저 Pod을 만들어 보았다.
또한 지난번에는 Kubernetes의 v0.19.3을 사용했지만 2015/7/21에 정식으로 v1을 발표했기 때문에 이번에는 v1.0.1을 사용했다.

포드가 뭐예요?


몇 개의 컨테이너를 조로 나누어 만든 물건.Kubernetes는 Pod 단위로 생성, 시작, 중지, 삭제 작업을 수행합니다(컨테이너 단위는 아님).그래서 용기를 만들고 싶을 때도'용기를 포함하는Pod'을 만든다.
또한 다음과 같은 특징이 있다.
  • Pod의 컨테이너가 동일한 호스트에 배치됨
  • Pod의 컨테이너 공유 가상 NIC 또는 프로세스 테이블
    → 즉, 동일한 IP를 사용할 수도 있고 서로의 과정을 볼 수도 있다.
  • 1. Kubernetes 클러스터 구축


    환경이 AWS인지 확인합니다.작업 EC2 인스턴스를 시작하고 Kubernetes 클러스터를 구축합니다.구축 단계는 "Kubernetes 학습(1) - AWS에 클러스터 구축" 를 참조하십시오.
    구축된 후, 경로를 작업용 실례의kubectl 명령을 통과합니다.예를 들면 이런 느낌.
    export PATH=/home/ec2-user/kubernetes/platforms/linux/amd64:$PATH
    
    한편 이번에 구축된 환경은 다음과 같다.VPC가 분리된 것은 Kubernetes의 설정 스크립트가 자체 VPC를 만들었기 때문입니다.

    2. 기본 Pod 생성 및 삭제


    점 생성


    작업 인스턴스에서 Pod 정의 파일을 만듭니다.우선, nginx 용기만 포함하는 Pod을 정의합니다.또한 정의는 yaml이나 json으로 쓸 수 있지만 여기는 yaml로 쓸 수 있습니다.
    pod-nginx.yaml:
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
    spec:
      containers:
        - name: nginx-container
          image: nginx
          ports:
          - containerPort: 80
    
    그리고 Pod을 만듭니다.
    kubectl create -f pod-nginx.yaml
    
    만들었는지 확인해 봐.
    $ kubectl get pod
    NAME        READY     STATUS    RESTARTS   AGE
    nginx-pod   1/1       Running   0          39s
    

    노드 확인


    Pod가 생성된 것은 알지만 Pod에 대한 자세한 정보를 표시하면 용기가 어느 노드(Minion)에서 생성되었는지 알 수 있습니다.
    $ kubectl describe pods nginx-pod
    Name:                       nginx-pod
    Namespace:                  default
    Image(s):                   nginx
    Node:                       ip-172-20-0-232.ap-northeast-1.compute.internal/172.20.0.232
    Labels:                     <none>
    Status:                     Running
    Reason:
    Message:
    IP:                         10.244.2.5
    Replication Controllers:    <none>
    Containers:
      nginx-container:
        Image:      nginx
        Limits:
          cpu:              100m
        State:              Running
          Started:          Sat, 01 Aug 2015 07:55:04 +0000
        Ready:              True
        Restart Count:      0
    Conditions:
      Type          Status
      Ready         True
    
    (以下略)
    
    Pod의 Minion(172.20.0.232)을 배치한 것을 알았기 때문에 작업용 실례에서 SSH로 연결해 보았습니다.
    $ ssh -i ~/.ssh/kube_aws_rsa [email protected]
    
    <보충>
  • 작업용 인스턴스와 Kubernetes의 클러스터는 서로 다른 VPC에 구성되어 있기 때문에 Private IP가 아닌 Public IP를 통해 연결됩니다.
  • Kubernetes의 스크립트 설정 에서 AWS에 그룹을 구축할 때, 스크립트는 ssh-keygen에서 키 쌍을 생성하여 EC2로 가져옵니다.가져온 EC2의 키 쌍은 각 인스턴스(Master 및 Minion)에 할당됩니다.ssh-keygen에서 생성된 키 쌍은 작업용 실례의 ~/입니다.ssh/kube_aws_rsa와kube_aws_rsa.pub이기 때문에 그것으로 로그인할 수 있습니다.
  • 미니온에서 실행되는 컨테이너를 표시합니다.확실히,nginx의 조합이 실행 중입니다.
    # Minon 内でコマンドを実行してます
    ubuntu@ip-172-20-0-232:~$ sudo docker ps
    CONTAINER ID        IMAGE                                                COMMAND                CREATED             STATUS              PORTS               NAMES
    d3623b586044        nginx:latest                                         "nginx -g 'daemon of   12 minutes ago      Up 12 minutes                           k8s_nginx-container.45a349f6_nginx-pod_default_9e9fdeef-3822-11e5-b530-06570fe694c3_f999e4f1
    (以下略: 他にも Kubernetes 自身が使用するコンテナが表示される)
    

    Pod에 대한 연결 확인


    작성된 Pod에 IP 주소를 할당합니다(다음 명령의 10.244.2.5).그러나 이 IP는 작업용 인스턴스와 같은 외부에서 연결할 수 없습니다.
    $ kubectl describe pods nginx-pod
    Name:                       nginx-pod
    Namespace:                  default
    Image(s):                   nginx
    Node:                       ip-172-20-0-232.ap-northeast-1.compute.internal/172.20.0.232
    Labels:                     <none>
    Status:                     Running
    Reason:
    Message:
    IP:                         10.244.2.5  ★これ★
    (以下略)
    
    연결을 확인하려면 먼저 Master나 Minon에 들어가는 것이 간단한데 이번에는 Master를 연결해 보았다.
    $ ssh -i ~/.ssh/kube_aws_rsa [email protected]
    
    Pod의 IP를 Master에서 액세스합니다.
    # Minon 内でコマンドを実行してます
    ubuntu@ip-172-20-0-232:~$ curl http://10.244.2.5
    
    nginx로부터 잘 대답해 주세요.

    점 삭제


    작업용 인스턴스에서 다음 명령을 실행합니다.
    $ kubectl delete pod nginx-pod
    pods/nginx-pod
    
    $ kubectl get pod
    NAME      READY     STATUS    RESTARTS   AGE
    

    3. 여러 용기를 포함하는 Pod 만들기


    여러 용기(nginx와mongo)를 포함하는 Pod를 만들어 보세요.제작뿐만 아니라 네트워크 설정이 공유되는지도 확인해야 한다.우선, Pod의 정의를 만듭니다.
    pod-nginx-mongo.yaml:
    apiVersion: v1
    kind: Pod
    metadata:
      name: www-pod
    spec:
      containers:
        - name: nginx-container
          image: nginx
          ports:
          - containerPort: 80
        - name: mongo-container
          image: mongo
    
    그리고 팟을 만들어요.
    $ kubectl create -f pod-nginx-mongo.yaml
    
    Pod 세부 정보를 표시할 때 두 개의 용기를 표시합니다.
    $ kubectl describe pods www-pod
    Name:                       www-pod
    Namespace:                  default
    Image(s):                   nginx,mongo
    Node:                       ip-172-20-0-232.ap-northeast-1.compute.internal/172.20.0.232
    Labels:                     <none>
    Status:                     Running
    Reason:
    Message:
    IP:                         10.244.2.6
    Replication Controllers:    <none>
    Containers:
      nginx-container:
        Image:      nginx
        Limits:
          cpu:              100m
        State:              Running
          Started:          Sat, 01 Aug 2015 10:37:30 +0000
        Ready:              True
        Restart Count:      0
      mongo-container:
        Image:      mongo
        Limits:
          cpu:              100m
        State:              Running
          Started:          Sat, 01 Aug 2015 10:37:46 +0000
        Ready:              True
        Restart Count:      0
    Conditions:
      Type          Status
      Ready         True
    (以下略)
    
    이어서 이 컨테이너를 설치한 미니언에 들어가 보자.
    $ ssh -i ~/.ssh/kube_aws_rsa 52.68.181.10
    
    실행 중인 컨테이너를 미니온에 표시합니다.확실히,nginx와mongodb의 용기는 같은 Minion에서 실행됩니다.
    ubuntu@ip-172-20-0-232:~$ sudo docker ps
    CONTAINER ID        IMAGE                                                COMMAND                CREATED              STATUS              PORTS               NAMES
    8797453df689        mongo:latest                                         "/entrypoint.sh mong   About a minute ago   Up About a minute                       k8s_mongo-container.8bc52932_www-pod_default_4f9c804f-3839-11e5-b530-06570fe694c3_81c950e5
    ff67e24c8bce        nginx:latest                                         "nginx -g 'daemon of   2 minutes ago        Up 2 minutes                            k8s_nginx-container.45a349f6_www-pod_default_4f9c804f-3839-11e5-b530-06570fe694c3_677c7dfd
    (以下略)
    
    각 용기 안의 네트워크 설정이 어떤지 봅시다.여기,dockerexec 명령을 사용하여 용기에서 ipaddr 명령을 실행합니다.확실히 같은 설정이야.
    컨테이너:
    ubuntu@ip-172-20-0-232:~$ sudo docker exec 8797453df689 ip addr show eth0
    13: eth0: <BROADCAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP
        link/ether 02:42:0a:f4:02:06 brd ff:ff:ff:ff:ff:ff
        inet 10.244.2.6/24 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:aff:fef4:206/64 scope link
           valid_lft forever preferred_lft forever
    
    mongo 컨테이너:
    ubuntu@ip-172-20-0-232:~$ sudo docker exec ff67e24c8bce ip addr show eth0
    13: eth0: <BROADCAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default
        link/ether 02:42:0a:f4:02:06 brd ff:ff:ff:ff:ff:ff
        inet 10.244.2.6/24 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:aff:fef4:206/64 scope link
           valid_lft forever preferred_lft forever
    

    웹 페이지 정보


    Kubernetes 101 - Kubectl CLI and Pods

    좋은 웹페이지 즐겨찾기