티스토리 뷰

Fruit Smoothies는 Kubernetes를 컴퓨팅 플랫폼으로 사용하고자 한다. 개발 팀은 이미 애플리케이션 개발 및 배포에 컨테이너를 사용하고 있으며 오케스트레이션 플랫폼을 사용하면 애플리케이션의 빠른 빌드, 제공 및 스케일링 할 수 있다.

이렇게 하려면 Kubernetes 환경의 기반을 배포해야 한다.

이 실습에서는 다음을 수행한다.

  • 새 리소스 그룹 만들기
  • 클러스터 네트워킹 구성
  • Azure Kubernetes Service 클러스터 만들기
  • kubectl을 사용하여 Kubernetes 클러스터에 연결
  • Kubernetes 네임스페이스 만들기

 

 

 

새 리소스 그룹 만들기

먼저 리소스를 배포할 리소스 그룹을 만들어야 한다.

1. Azure 계정으로 로그인 하고 우측 상단의 Azure Cloud Shell을 선택 후 Bash를 선택한다.

 

(필자는 작업의 편의를 위해 Windows Terminal을 통해 Azure Cloud Shell에서 작업을 진행할 것이다. Windows Terminal을 설치하려면 여기를 참조한다.)
1. 설치가 완료되면 Windows Terminal을 실행한다. 
2. 새 탭 드롭다운 메뉴에서 Azure Cloud Shell을 선택한다.

3. 작업에 사용할 테넌트가 여러 개인 경우 하나를 지정 선택하고 구독이 여러 개인 경우 타겟 구독으로 지정한다. (하나의 테넌트와 하나의 구독인 경우 불필요)
       az account set -s <구독 ID>

 

2. 배포 스크립트 전체에 걸쳐서 몇몇의 값을 재사용 할 것이다. 예를 들어, 리소스 그룹을 만들려는 지역(예: koreacentral)을 선택해야 한다. 다른 리소스 값을 선택하는 경우 이 모듈의 나머지 실습에 사용할 수 있도록 기억해 두자. Cloud Shell 세션 간에 값을 다시 정의해야 할 수 있다. 다음 명령을 실행하여 Bash 변수에 이러한 값을 기록한다.

(혹시 실습 도중 세션이 초기화 되면 변수 할당 작업을 다시 수행한다.)


REGION_NAME=koreacentral

RESOURCE_GROUP=aksworkshop
SUBNET_NAME=aks-subnet
VNET_NAME=aks-vnet

 

echo $REGION_NAME과 같이 echo 명령을 사용하여 각 값을 확인할 수 있다.

kim@Azure:~$ az account set -s 1199b626-xxxx-xxxx-xxxx-cabaxxxxee88
kim@Azure:~$ REGION_NAME=koreacentral
kim@Azure:~$ RESOURCE_GROUP=aksworkshop
kim@Azure:~$ SUBNET_NAME=aks-subnet
kim@Azure:~$ VNET_NAME=aks-vnet
kim@Azure:~$ echo $REGION_NAME
koreacentral
kim@Azure:~$

 

3. aksworkshop라는 이름의 새로운 리소스 그룹을 만든다. 이 실습에서 만든 모든 리소스를 이 리소스 그룹에 배포한다. 단일 리소스 그룹을 사용하면 모듈을 마친 후 리소스를 더 쉽게 정리할 수 있다.


az group create \
--name $RESOURCE_GROUP \
--location $REGION_NAME

kim@Azure:~$ az group create \
> --name $RESOURCE_GROUP \
> --location $REGION_NAME
{
  "id": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/aksworkshop",
  "location": "koreacentral",
  "managedBy": null,
  "name": "aksworkshop",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

 

 

네트워킹 구성

AKS 클러스터를 배포할 때 선택할 수 있는 두 가지 네트워크 모델이 있다. 첫 번째 모델은 Kubenet 네트워킹이며, 두 번째 모델은 Azure CNI(Container Networking Interface) 네트워킹이다.

 

Kubenet 네트워킹이란?

Kubenet 네트워킹은 Kubernetes의 기본 네트워킹 모델이다. Kubenet 네트워킹을 사용하면 노드에 Azure 가상 네트워크 서브넷에서 IP 주소를 할당한다. Pod는 논리적으로 다른 주소 공간에서 노드의 Azure 가상 네트워크 서브넷으로 IP 주소를 받는다.

그런 다음 Pod가 Azure 가상 네트워크의 리소스에 연결할 수 있도록 NAT(Network Address Translation)가 구성된다. 트래픽의 원본 IP 주소는 노드의 기본 IP 주소로 변환된 다음, 노드에서 구성된다. 참고로 Pod는 노드 IP 뒤에 “숨겨진” IP 주소를 수신한다.

 

말이 너무 어려운데 풀어서 표현하면 Kubenet 네트워킹 모델의 경우, 노드는 Azure 가상 네트워크의 서브넷 CIDR 주소 공간에서 IP를 할당 받게 되고 Pod는 Pod CIDR 주소공간으로부터 IP를 할당 받게 되는데 이 Pod가 다른 VNET 서브넷 상의 리소스와 통신하기 위해서는 자체 할당받은 IP로는 직접 통신이 불가하므로 소속된 노드의 IP로 NAT 되어 처리된다. 정리해서 다음과 같이 중요 포인트만 요약해서 이해하고 넘어간다.

Pod가 다른 VNET 서브넷의 리소스와 통신하기 위해서는 자체 할당받은 "숨겨진" IP가 아닌 소속된 노드의 IP를 통해 NAT 되어 처리되는 네트워킹 모델로 서비스가 커질 수록 이 처리량이 증가하게 되어 Latency 및 Performance 상 이슈가 있을 수 있다. 따라서 프로덕션 환경에서의 사용을 추천하지 않고 있다. 두 가지 네트워킹에 대한 자세한 내용은 여기를 참조한다.   

 

 

Azure CNI(Container Networking Interface) 네트워킹이란?

Azure CNI(Container Networking Interface)를 사용하면 AKS 클러스터는 기존 가상 네트워크 리소스 및 구성에 연결된다. 이 네트워킹 모델에서 모든 Pod는 서브넷에서 IP 주소를 가져오며 바로 액세스 가능하다. 이러한 IP 주소는 네트워크 공간에서 고유해야 하며 미리 계산되어야 한다.

사용할 기능 중 일부에는 Azure Container Networking Interface 네트워킹 구성을 사용하여 AKS 클러스터를 배포해야 한다.

좀 더 자세한 비교는 이 모듈의 끝부분에 있는 자세한 정보 섹션을 참조한다.

AKS 클러스터에 대한 가상 네트워크를 만들어 보겠다. 클러스터를 배포할 때 이 가상 네트워크를 사용하고 네트워킹 모델을 지정하게 된다.

1. 먼저 가상 네트워크와 서브넷을 만든다. 클러스터에 배포된 Pod는 서브넷에서 IP를 할당받는다. 다음 명령을 실행하여 가상 네트워크를 만든다.


az network vnet create \
--resource-group $RESOURCE_GROUP \
--location $REGION_NAME \
--name $VNET_NAME \
--address-prefixes 10.0.0.0/8 \
--subnet-name $SUBNET_NAME \
--subnet-prefixes 10.240.0.0/16

kim@Azure:~$ az network vnet create \
> --resource-group $RESOURCE_GROUP \
> --location $REGION_NAME \
> --name $VNET_NAME \
> --address-prefixes 10.0.0.0/8 \
> --subnet-name $SUBNET_NAME \
> --subnet-prefixes 10.240.0.0/16
{
  "newVNet": {
    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/8"
      ]
    },
    "bgpCommunities": null,
    "ddosProtectionPlan": null,
    "dhcpOptions": {
      "dnsServers": []
    },
    "enableDdosProtection": false,
    "enableVmProtection": null,
    "etag": "W/\"e289ecc2-9f7f-444c-8288-f4467527d21f\"",
    "extendedLocation": null,
    "id": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/aksworkshop/providers/Microsoft.Network/virtualNetworks/aks-vnet",
    "ipAllocations": null,
    "location": "koreacentral",
    "name": "aks-vnet",
    "provisioningState": "Succeeded",
    "resourceGroup": "aksworkshop",
    "resourceGuid": "4945746b-e60b-4873-825a-329eefe2b60a",
    "subnets": [
      {
        "addressPrefix": "10.240.0.0/16",
        "addressPrefixes": null,
        "delegations": [],
        "etag": "W/\"e289ecc2-9f7f-444c-8288-f4467527d21f\"",
        "id": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/aksworkshop/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet",
        "ipAllocations": null,
        "ipConfigurationProfiles": null,
        "ipConfigurations": null,
        "name": "aks-subnet",
        "natGateway": null,
        "networkSecurityGroup": null,
        "privateEndpointNetworkPolicies": "Enabled",
        "privateEndpoints": null,
        "privateLinkServiceNetworkPolicies": "Enabled",
        "provisioningState": "Succeeded",
        "purpose": null,
        "resourceGroup": "aksworkshop",
        "resourceNavigationLinks": null,
        "routeTable": null,
        "serviceAssociationLinks": null,
        "serviceEndpointPolicies": null,
        "serviceEndpoints": null,
        "type": "Microsoft.Network/virtualNetworks/subnets"
      }
    ],
    "tags": {},
    "type": "Microsoft.Network/virtualNetworks",
    "virtualNetworkPeerings": []
  }
}

 

2. 다음으로, 아래 명령을 실행하여 서브넷 ID를 검색하고 Bash 변수에 저장한다.


SUBNET_ID=$(az network vnet subnet show \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $SUBNET_NAME \
--query id -o tsv)

kim@Azure:~$ SUBNET_ID=$(az network vnet subnet show \
> --resource-group $RESOURCE_GROUP \
> --vnet-name $VNET_NAME \
> --name $SUBNET_NAME \
> --query id -o tsv)
kim@Azure:~$ echo $SUBNET_ID
/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/aksworkshop/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet

 

 

 

AKS 클러스터 만들기

새 가상 네트워크가 준비되면 계속 진행하여 새 클러스터를 만들 수 있다. az aks create 명령을 실행하기 전에 알아야 할 두 가지 값이 있다. 첫째는 선택된 지역에서 사용할 수 있는 미리 보기가 아닌 최신 Kubernetes 버전의 버전 이름이며, 둘째는 클러스터에 대한 고유 이름이다.

1. 미리 보기가 아닌 최신 Kubernetes 버전을 가져오려면 az aks get-versions 명령을 사용한다. 명령에서 반환되는 값을 VERSION이라는 Bash 변수에 저장한다. 다음 명령을 실행하여 버전 번호를 검색하고 저장한다.


VERSION=$(az aks get-versions \
--location $REGION_NAME \
--query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
--output tsv)

kim@Azure:~$ VERSION=$(az aks get-versions \
> --location $REGION_NAME \
> --query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
> --output tsv)
kim@Azure:~$ echo $VERSION
1.19.7

 

2. AKS 클러스터 이름은 고유해야 한다. 다음 명령을 실행하여 고유한 이름을 가진 Bash 변수를 만든다.


AKS_CLUSTER_NAME=aksworkshop-$RANDOM

 

3. 다음 명령을 실행하여 $AKS_CLUSTER_NAME에 저장된 값을 출력한다. 나중에 사용할 수 있도록 이 정보를 적어 둔다. 필요한 경우 나중에 변수를 다시 구성하는 데 필요하다.


echo $AKS_CLUSTER_NAME

kim@Azure:~$ AKS_CLUSTER_NAME=aksworkshop-$RANDOM
kim@Azure:~$ echo $AKS_CLUSTER_NAME
aksworkshop-25918

 

4. 다음 az aks create 명령을 실행하여 최신 Kubernetes 버전을 실행하는 AKS 클러스터를 만든다. 이 명령을 완료하는 데 몇 분이 걸릴 수 있다. (약 4분 소요)


az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--vm-set-type VirtualMachineScaleSets \
--node-count 2 \
--load-balancer-sku standard \
--location $REGION_NAME \
--kubernetes-version $VERSION \
--network-plugin azure \
--vnet-subnet-id $SUBNET_ID \
--service-cidr 10.2.0.0/24 \
--dns-service-ip 10.2.0.10 \
--docker-bridge-address 172.17.0.1/16 \
--generate-ssh-keys

kim@Azure:~$ az aks create \
> --resource-group $RESOURCE_GROUP \
> --name $AKS_CLUSTER_NAME \
> --vm-set-type VirtualMachineScaleSets \
> --node-count 2 \
> --load-balancer-sku standard \
ION \
--network-plugin azure \
--vnet-subnet-id $SUBNET> --location $REGION_NAME \
> --kubernetes-version $VERSION \
> --network-plugin azure \
> --vnet-subnet-id $SUBNET_ID \
> --service-cidr 10.2.0.0/24 \
> --dns-service-ip 10.2.0.10 \
> --docker-bridge-address 172.17.0.1/16 \
> --generate-ssh-keys
It is highly recommended to use USER assigned identity (option --assign-identity) when you want to bring your ownsubnet, which will have no latency for the role assignment to take effect. When using SYSTEM assigned identity, azure-cli will grant Network Contributor role to the system assigned identity after the cluster is created, and the role assignment will take some time to take effect, see https://docs.microsoft.com/en-us/azure/aks/use-managed-identity, proceed to create cluster with system assigned identity? (y/N): y
{- Finished ..
  "aadProfile": null,
  "addonProfiles": null,
  "agentPoolProfiles": [
    {
      "availabilityZones": null,
      "count": 2,
      "enableAutoScaling": null,
      "enableEncryptionAtHost": null,
      "enableNodePublicIp": false,
      "kubeletConfig": null,
      "kubeletDiskType": "OS",
      "linuxOsConfig": null,
      "maxCount": null,
      "maxPods": 30,
      "minCount": null,
      "mode": "System",
      "name": "nodepool1",
      "nodeImageVersion": "AKSUbuntu-1804gen2containerd-2021.03.29",
      "nodeLabels": {},
      "nodePublicIpPrefixId": null,
      "nodeTaints": null,
      "orchestratorVersion": "1.19.7",
      "osDiskSizeGb": 128,
      "osDiskType": "Managed",
      "osType": "Linux",
      "podSubnetId": null,
      "powerState": {
        "code": "Running"
      },
      "provisioningState": "Succeeded",
      "proximityPlacementGroupId": null,
      "scaleSetEvictionPolicy": null,
      "scaleSetPriority": null,
      "spotMaxPrice": null,
      "tags": null,
      "type": "VirtualMachineScaleSets",
      "upgradeSettings": null,
      "vmSize": "Standard_DS2_v2",
      "vnetSubnetId": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/aksworkshop/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet"
    }
  ],
  "apiServerAccessProfile": null,
  "autoScalerProfile": null,
  "autoUpgradeProfile": null,
  "azurePortalFqdn": "aksworksho-aksworkshop-1199b6-9c9e685c.portal.hcp.koreacentral.azmk8s.io",
  "diskEncryptionSetId": null,
  "dnsPrefix": "aksworksho-aksworkshop-1199b6",
  "enablePodSecurityPolicy": null,
  "enableRbac": true,
  "fqdn": "aksworksho-aksworkshop-1199b6-9c9e685c.hcp.koreacentral.azmk8s.io",
  "fqdnSubdomain": null,
  "id": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourcegroups/aksworkshop/providers/Microsoft.ContainerService/managedClusters/aksworkshop-25918",
  "identity": {
    "principalId": "6b18b894-9dbd-4c63-bcd7-aa6f48ad02c6",
    "tenantId": "917bfe84-0ca6-488d-ad3a-236e41ceafe9",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  },
  "identityProfile": {
    "kubeletidentity": {
      "clientId": "29e95bec-6b16-4b98-a87e-8d9661ddd1c8",
      "objectId": "96403de2-52b8-4350-9a3c-dc1e747dc817",
      "resourceId": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourcegroups/MC_aksworkshop_aksworkshop-25918_koreacentral/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aksworkshop-25918-agentpool"
    }
  },
  "kubernetesVersion": "1.19.7",
  "linuxProfile": {
    "adminUsername": "azureuser",
    "ssh": {
      "publicKeys": [
        {
          "keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNv2eLCX5Bkdn3zt0uG3CfL6hWaM5feriY4K8qTDrO64jOAPRyFrKgfrZKP7f85SAaK5QDoM//5niYYHMqoV8n0+x4qsXfYrODzly4z7TLocHJl/Osb1lxCxdgx64HZYWhVXmRarfJ0ffDOhAhUIKcpKIf2HR9YmMdbj4UYT2YTYUCR7AE8QsD2hzr53fHc7TSxIGe8tFGJ+N+dumqT/y8XKDK9VDWN1h8tt+MuHYB4JWrKsA8NqIdNFrgqAzNDxLX7XHwDV7GsBKkz5CcZmQpD4Hq2LjL+EeQf7WFxokpsXJRnoX74y4ozeVggXnEAOfTzD5jXel+L39zn+xJIK8D kim@cc-80381d60-cbc8669fb-s87xb\n"
        }
      ]
    }
  },
  "location": "koreacentral",
  "maxAgentPools": 10,
  "name": "aksworkshop-25918",
  "networkProfile": {
    "dnsServiceIp": "10.2.0.10",
    "dockerBridgeCidr": "172.17.0.1/16",
    "loadBalancerProfile": {
      "allocatedOutboundPorts": null,
      "effectiveOutboundIps": [
        {
          "id": "/subscriptions/1199b626-xxxx-xxxx-xxxx-cabaxxxxee88/resourceGroups/MC_aksworkshop_aksworkshop-25918_koreacentral/providers/Microsoft.Network/publicIPAddresses/d7853cb1-46d1-43ef-8f78-be8c6fb3426e",
          "resourceGroup": "MC_aksworkshop_aksworkshop-25918_koreacentral"
        }
      ],
      "idleTimeoutInMinutes": null,
      "managedOutboundIps": {
        "count": 1
      },
      "outboundIpPrefixes": null,
      "outboundIps": null
    },
    "loadBalancerSku": "Standard",
    "networkMode": null,
    "networkPlugin": "azure",
    "networkPolicy": null,
    "outboundType": "loadBalancer",
    "podCidr": null,
    "serviceCidr": "10.2.0.0/24"
  },
  "nodeResourceGroup": "MC_aksworkshop_aksworkshop-25918_koreacentral",
  "podIdentityProfile": null,
  "powerState": {
    "code": "Running"
  },
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "aksworkshop",
  "servicePrincipalProfile": {
    "clientId": "msi",
    "secret": null
  },
  "sku": {
    "name": "Basic",
    "tier": "Free"
  },
  "tags": null,
  "type": "Microsoft.ContainerService/ManagedClusters",
  "windowsProfile": {
    "adminPassword": null,
    "adminUsername": "azureuser",
    "enableCSIProxy": true,
    "licenseType": null
  }
}

 

위 명령에서 변수를 검토해 보겠다.

  • $AKS_CLUSTER_NAME은 AKS 클러스터의 이름을 지정한다.
  • $VERSION은 이전에 검색한 최신 Kubernetes 버전이다.
  • $SUBNET_ID는 AKS로 구성할 가상 네트워크에서 만든 서브넷의 ID이다.

다음 배포 구성을 참고한다.

  • --vm-set-type: 가상 머신 확장 집합을 사용하여 클러스터를 만들도록 지정한다. 가상 머신 확장 집합을 사용하면 필요한 경우 클러스터 자동 크기 조정기에서 스위치 온할 수 있다.
  • --node-count: 노드 2개로 클러스터를 만들도록 지정한다. 기본 노드 수는 노드 3개다. 그러나 평가판 계정을 사용하여 이 실습을 실행하는 경우 기본 설정을 유지하면 할당량 제한으로 인해 클러스터를 만들지 못할 수 있다.
  • --network-plugin: CNI 플러그 인을 사용하여 AKS 클러스터를 만들도록 지정한다.
  • --service-cidr: 이 주소 범위는 Kubernetes에서 클러스터의 내부 서비스에 할당하는 가상 IP의 집합이다. 범위는 클러스터의 가상 네트워크 IP 주소 범위 내에 있지 않아야 한다. Pod에 대해 생성된 서브넷과 달라야 한다.
  • --dns-service-ip: 클러스터의 DNS 서비스에 대한 IP 주소이다. 이 주소는 Kubernetes 서비스 주소 범위 내에 있어야한다. 주소 범위에 첫 번째 IP 주소(예: 0.1)를 사용하지 말자. 서브넷 범위의 첫 번째 주소는 kubernetes.default.svc.cluster.local 주소에 사용된다.
  • --docker-bridge-address: Docker 브리지 네트워크 주소는 모든 Docker 설치에 있는 기본 docker0 브리지 네트워크 주소를 나타낸다. AKS 클러스터 또는 Pod 자체는 docker0 브리지를 사용하지 않는다. 그러나 AKS 클러스터 내에서 Docker 빌드와 같은 시나리오를 계속 지원하려면 이 주소를 설정해야 한다. Docker 브리지 네트워크 주소에 대해 CIDR(Classless Inter-Domain Routing )을 선택해야 한다. CIDR을 설정하지 않으면 Docker가 자동으로 서브넷을 선택한다. 이 서브넷은 다른 CIDR과 충돌할 수 있다. 클러스터의 서비스 CIDR과 Pod CIDR 등 네트워크의 나머지 CIDR과 충돌하지 않는 주소 공간을 선택한다.

 

 

kubectl을 사용하여 클러스터 연결 테스트

kubectl은 클러스터와 상호 작용하는 데 사용하는 기본 Kubernetes 명령줄 클라이언트이며 Cloud Shell에서 사용할 수 있다. kubectl을 클러스터에 연결하려면 클러스터 컨텍스트가 필요하다. 컨텍스트에는 클러스터의 주소, 사용자 및 네임스페이스가 포함된다. az aks get-credentials 명령을 사용하여 kubectl의 인스턴스를 구성한다.

1. 아래 명령을 실행하여 클러스터 자격 증명을 검색한다.


az aks get-credentials \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME

kim@Azure:~$ az aks get-credentials \
> --resource-group $RESOURCE_GROUP \
> --name $AKS_CLUSTER_NAME
Merged "aksworkshop-25918" as current context in /home/kim/.kube/config

 

2. 클러스터의 모든 노드를 나열하여 배포된 항목을 살펴보겠다. kubectl get nodes 명령을 사용하여 모든 노드를 나열한다.


kubectl get nodes

 

클러스터 노드의 목록이 표시된다. 예를 들면 다음과 같다.

kim@Azure:~$ kubectl get nodes
NAME                                STATUS   ROLES   AGE   VERSION
aks-nodepool1-91538760-vmss000000   Ready    agent   14m   v1.19.7
aks-nodepool1-91538760-vmss000001   Ready    agent   15m   v1.19.7

 

 

 

애플리케이션의 Kubernetes 네임스페이스 만들기

Fruit Smoothies는 배포된 AKS 클러스터에서 다른 팀의 여러 앱도 배포하려고 한다. 회사는 여러 클러스터를 실행하는 대신 동일한 클러스터에서 팀과 워크로드를 논리적으로 격리할 수 있는 Kubernetes 기능을 사용하려고 한다. 목표는 각 팀이 필요로 하는 리소스로 범위가 지정된 권한을 최소한의 수로 제공하는 것이다.

 

 

네임스페이스란?

Kubernetes의 네임스페이스는 논리적 격리 경계를 만든다. 리소스 이름은 하나의 네임스페이스 내에서 고유해야 하지만 네임스페이스 전체에 걸쳐 고유할 필요는 없다. Kubernetes 리소스를 사용할 때 네임스페이스를 지정하지 않으면 default 네임스페이스가 지정된다.

평가 애플리케이션의 네임스페이스를 만들어 보겠다.

 

1. 클러스터의 현재 네임스페이스를 나열한다.


kubectl get namespace

kim@Azure:~$ kubectl get namespace
NAME              STATUS   AGE
default           Active   19m
kube-node-lease   Active   19m
kube-public       Active   19m
kube-system       Active   19m

 

2. kubectl create namespace 명령을 사용하여 ratingsapp이라는 애플리케이션의 네임스페이스를 만든다.


kubectl create namespace ratingsapp

 

kim@Azure:~$ kubectl create namespace ratingsapp
namespace/ratingsapp created

 

 

 

요약

이 실습에서는 리소스에 대한 리소스 그룹을 만들었다. 클러스터에서 사용할 가상 네트워크를 만들었다. 그런 다음, Azure CNI 네트워킹 모드를 포함하여 AKS 클러스터를 배포했다. 그리고 kubectl을 사용하여 클러스터에 연결하고 Kubernetes 리소스에 대한 네임스페이스를 만들었다.

다음으로, AKS 클러스터와 함께 사용할 ACR(Azure Container Registry) 인스턴스를 만들어서 구성하고, 컨테이너화된 평가 앱을 저장한다.

 

주의

실습과정에서 생성한 리소스로 인해 예상치 못한 과금이 발생할 수 있으므로 지금 자체적으로 실습을 이어서 하지 않는 경우라면, 생성된 리소스는 중지(aks 노드 풀) 및 제거한다. 

 

 

3편에서 계속

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함