Azure Container Orchestratoin #2
manchiro edited this page Jul 15, 2020
·
15 revisions
- Azure๋ ๊ตฌ๋ ๊ธฐ๋ฐ์ ๊ณผ๊ธ ์ฐจ์ง์ ํจ.
- AZure ํฌํ์์ ๋ฆฌ์์ค ๊ทธ๋ฃน > ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์์ฑ > ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ ์์ฑ
- Azure (http://portal.azure.com) : admin5@gkn2019hotmail.onmicrosoft.com / skcc*
- ๋ฆฌ์์ค ๊ทธ๋ฃน๋ช : admin5-Resource_Group
- Kubernetes ์๋น์ค : admin5-k8s
- Azure ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ : admin5acr, admin5acr.azurecr.io
# az account set --subscription "์ข
๋์ 1"
# az aks get-credentials --resource-group admin5-Resource_Group --name admin5-k8s
# az acr login --name admin5acr
# az aks update -n admin5-k8s -g admin5-Resource_Group --attach-acr admin5acr
# nano Dockerfile - Dockerfile ์์ฑ
# docker build -t admin5acr.azurecr.io/my-nginx:v2 - docker build
# docker images : docker images ํ์ธ
# docker push admin5acr.azurecr.io/my-nginx:v2 : docker๋ฅผ ๋ฆฌํ์งํ ๋ฆฌ์ push
# kubectl create deploy my-nginx --image=admin5acr.azurecr.io/my-nginx:v2 - AZure portal ์์ ํ์ธ
# kubectl create -f nginx.yaml
# kubectl apply -f nginx.yaml
# kubectl ๋์ฌ ๋ชฉ์ ์ด
# kubectl get nodes - ํด๋ฌ์คํฐ์ ๋ง๋ค์ด ์ง ๋
ธ๋์ ์ (worker nodes. VM. ์๋ฒ)
# kubectl get pod
# kubectl get pod -o wide - Output์ ์ข๋ ๋ง์ด ์ถ๋ ฅ. node ์ ๋ณด๋ ๊ฐ์ด ๋ณด์ฌ์ง.
- ์ปจํ ์ด๋์ ์๋ ๋ฐฐํฌ
- Self Healing - Nonn Terminating
# kubectl create deploy my-nginx --image=admin5acr.azurecr.io/my-nginx:v2
# kubectl expose deploy my-nginx --type=LoadBalancer --port=80 : ์ธ๋ถ์ ์คํ. type ์ LoadBalancer๋ก ์ฃผ์ด์ผ External IP๋ก ๋์ด์ผ ํจ.
skccadmin@SKCC18D00132:~/container-orchestration/yaml$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-nginx-74dcffd6ff-xcp4h 1/1 Running 0 3m5s
pod/nginx-deployment-54f57cf6bf-78pp9 1/1 Running 0 27m
pod/nginx-deployment-54f57cf6bf-svn8x 1/1 Running 0 18m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 38m
service/my-nginx LoadBalancer 10.0.159.90 40.82.129.79 80:30236/TCP 13s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx 1/1 1 1 3m5s
deployment.apps/nginx-deployment 2/2 2 2 27m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx-74dcffd6ff 1 1 1 3m5s
replicaset.apps/nginx-deployment-54f57cf6bf 2 2 2 27m
- External IP ๋ก ๋ธ๋ผ์ฐ์ ์์ ์กฐํํ๋ฉด index.html ๋ด์ฉ์ด ์กฐํ๋จ. http://40.82.129.79
- kubectl describe pod pod๋ช : ์ด๋ป๊ฒ ์์ฑ๋์๋์ง ์ด๋ ฅ
- kubectl logs pod๋ช -f : kube๋ก๊ทธ๋ก ํ์ธ
- kubectl exec -it pod๋ช -- /bin/bash : POD๋ก๊ทธ ํ์ธ
- Azure Portal ์์ > ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค > ๋์ ํด๋ฌ์คํฐ์๋น์ค ์ ํ > ๋ ธ๋ํ > ๋ด๊ฐ ์ ํํ "admin5-k8s | ๋ ธ๋ ํ" ์ ํํ๋ฉด ์์ธ ๋ด์ฉ ์กฐํ ๊ฐ๋ฅ.
- RAM(GiB) : 1์ด/1byte๊ฐ ๋์ด๊ธฐ ๋๋ฌธ์ ์ ํํ ์ฌ์ด์ฆ๋ฅผ ํํํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๋จ์์. Gibibyte.
- kubectl scale type/type๋ช
--replicas=๊ฐ์
- kubectl scale replicaset/frontend --replicas=5 : replica ๊ฐ์ ์กฐ์
- kubectl scale deployment/my-nginx --replicas=3
- ๋ ธ๋์ ์๋ฅผ ๋๋ฆฌ๊ณ ์ค์ด๋ ๊ฒ์ Scale out/in ์ด๊ณ ,
- ๋ ธ๋์ ์ฑ๋ฅ์ ๋๋ฆฌ๊ณ ์ค์ด๋ ๊ฒ์ Scale Up/Down ์ด๋ค
- CF) deployment์ ๋ฒ์ ผ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
- kubectl delete deployment ... ์ญ์ ํ๊ณ ๋ค์ ์์ฑ
- kubectl apply -f yaml ๋ช --- ๋ค์ ๋ฐ์
- kubectl set image .. ๋ก ๋ณ๊ฒฝ
kubectl set image deployment/nginx deployment nginx=nginx:1.9.1
- ๋ณ๊ฒฝํ๊ธฐ
CF) kubectl edit deployment nginx-deployment
skccadmin@SKCC18D00132:~/container-orchestration/yaml/replicaset$ kubectl set image deploy nginx-deployment nginx=nginx:1.9.1
skccadmin@SKCC18D00132:~/container-orchestration/yaml/replicaset$ kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
my-nginx 2/2 2 2 3h17m my-nginx admin5acr.azurecr.io/my-nginx:v2 app=my-nginx
my-nginx3 0/1 1 0 169m nginx manchiro/nginx app=my-nginx3
nginx-deployment 2/2 2 2 3h41m nginx nginx:1.9.1 app=nginx
# kubectl rollout history deploy nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
2 v2 is nginx:1.9.1
# kubectl rollout undo deploy nginx-deployment - ์ด์ ๋ฒ์ ์ผ๋ก ๋ค์ ์ฌ๋ฆผ
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 v2 is nginx:1.9.1
3 <none>
- (์คํ ์ค์ผ์ผ๋ง ์ค์ , hpa: HorizontalPodAutoscaler )
> kubectl top pods
> kubectl top nodes
> kubectl apply -f https://k8s.io/examples/application/php-apache.yaml - apache ์์ฑ :
> kubectl autoscale deployment php-apache --cpu-percent=20 --min=1 --max=10
> kubectl get hpa php-apache -o yaml
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 20
status:
currentCPUUtilizationPercentage: 0
currentReplicas: 1
desiredReplicas: 1
- ๋ถํ๋ฅผ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ : ์ค ์กฐ์ฌํด์ผ ํ ๊ฒ . External IP ๋ก ๋ง๋ ํ ํธ์ถํ์ง ๋ง์๋ผ.
- ํด๋ผ์ฐ๋ ๋ด์์ ํ ์คํธ๋ฅผ ํด๋ผ.
> kubectl create -f siege.yaml
> kubectl exec -it siege -- /bin/bash
> siege -c30 -t30S -v http://php-apache : -C 30๋ช
์ ์ฌ์ฉ์๊ฐ -t 30์ด ๋์ http ์๋น์ค๋ฅผ ํธ์ถํด๋ผ.
- Recreate : ๋ค์ดํ๊ณ ๋ฐฐํฌํ๊ณ ์คํํธ.
- Ramped (=Rolling Update) : ๊น๋ฐ์ด๋ฉด์, ํ๋์ฉ ์์ฐจ์ ์ผ๋ก ๋ฐฐํฌํจ (k8s์ ๊ธฐ๋ณธ ๋ฐฐํฌ ์ ๋ต).
- Blue/Green : ํ์ฌ ์๋น์ค๋ Blue. ์๋ก์ด ์๋น์ค๋ Green. Zero Downtime์ด ๋ฐ์ํ์ง๋ง ๋น์ฉ์ด ๋ฐ์ํจ. (*์์๋ฌธ์ )
- Canary : ์๋ก์ด ๋ฒ์ ผ์ ๋ฐฐํฌ ํ, ํน์ Request๋ง ์ฌ์ฉํ๋๋ก ์ค์ .
- A/B Testing
- Shadow
# kubectl create ns admin5
# kubectl create deploy my-nginx4 --image=nginx -n admin5
# kubectl expose deploy my-nginx3 --type=LoadBalancer --port=80 -n=admin5
# kubectl get all -n=admin5
skccadmin@SKCC18D00132:~/container-orchestration/yaml/replicaset$ kubectl get all -n=admin5
NAME READY STATUS RESTARTS AGE
pod/my-nginx3-9d6bb446b-7qsdw 1/1 Running 0 2m38s
pod/my-nginx3-9d6bb446b-l8vtj 1/1 Running 0 2m38s
pod/my-nginx3-9d6bb446b-m7f6c 1/1 Running 0 6m56s
pod/my-nginx3-9d6bb446b-str45 1/1 Running 0 2m38s
pod/my-nginx3-9d6bb446b-whdfg 1/1 Running 0 2m38s
pod/my-nginx4-6fc7f8b4f8-9wz9v 1/1 Running 0 5m18s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx3 LoadBalancer 10.0.242.183 <pending> 80:31012/TCP 3s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx3 5/5 5 5 6m56s
deployment.apps/my-nginx4 1/1 1 1 5m18s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx3-9d6bb446b 5 5 5 6m56s
replicaset.apps/my-nginx4-6fc7f8b4f8 1 1 1 5m18s
# kubectl delete deploy,service,pod --all
- Service ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๋ Kubernetes ์ ์ฑ๋๋ก ๋ฐํ์์ , ์ด๋ฅผ ๊ฒ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์
- Service ์์ฑ ์ IP ์ฃผ์ ํ ๋น ๋ฐฉ์๊ณผ ์๋น์ค ์ฐ๊ณ ๋ฑ์ ๋ฐ๋ผ 4 ๊ฐ์ง๋ก ๊ตฌ๋ถ
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
- G/W ์ญํ ์ ํ๋ ํ๊ฐ๋ง ๋ง๋ค๊ฒ ๋จ. ๋น์ฉ๊ณผ ๊ด๋ จ์ด ์์. ๋ณด์. ๋๋จธ์ง ํํธ๋ ํ ํฐ๋ง ์ฒดํฌํ๋๋ก ํ๋ฉด ๋จ.
- IngressControlor๋ : NodePort Type์ผ๋ก ์์ฑํจ.
- ํด๋ผ์ฐ๋๋ด ์๋น์ค URL
- --- : ๊ฐ์ฒด์ ๊ตฌ๋ถ์
- -- : array
curl [์๋น์ค๋ช ].[namespace].[์ํ์ค]
- ์
- ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ๋ฌ ํธ์คํธ์ ๊ฑธ์ฒ Stateless ํ ์ปจํ ์ด๋๋ฅผ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ชฉํ์ด๊ธฐ์ ์์์ฑ ์๋ ์ ์ฅ์ฅ์น (Persistent Value)๋ฅผ ๊ณ ๋ คํด์ผ ํจ.
- PV vs PVC
- PV : ์ ์๋ ์ฉ๋๋งํผ pod๋ฅผ ์ฌ์ฉํ ์ ์์.
- provisioning : POD๊ฐ ์ํ๋ ๋งํผ์ ์คํ ๋ฆฌ์ง๋ฅผ ์ธํ๋ผ ์ ์ผ๋ก ์ค์ ํ๋ ๊ฒ.
skccadmin@SKCC18D00132:~/container-orchestration/yaml$ kubectl get storageclass (=sc)
NAME PROVISIONER AGE
azurefile kubernetes.io/azure-file 23h
azurefile-premium kubernetes.io/azure-file 23h
default (default) kubernetes.io/azure-disk 5h55m
managed-premium kubernetes.io/azure-disk 5h55m (SSD ๊ธฐ๋ฐ)
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ก๋ถํฐ ์ค์ ์ ๋ณด๋ฅผ ๋ถ๋ฆฌํ ์ ์๊ฒ ํด์ค.
- ๋์ผํ ์ด๋ฏธ์ง๋ก ๊ฐ๋ฐ/์ด์์ ๋ถ๋ณํ๊ฒ ์ค์ ํ๊ธฐ ์ํจ.
- https://workflowy.com/s/msa/27a0ioMCzlpV04Ib#/6ce6be6e8804
$ docker build -t admin5acr.azurerc.io/cm-sandbox:v1 .
$ docker push admin5acr.azurerc.io/cm-sandbox:v1
# ์ 2 ๋ช
๋ นํ์ ์๋ ํ๋์ ๋ช
๋ น์ผ๋ก ์ํ ๊ฐ๋ฅ
$ az acr build --registry admin5acr --image admin5acr.azurecr.io/cm-sandbox:v1 .
$
- ConfigMap ์ด ์ผ๋ฐ์ ์ธ ํ๊ฒฝ ์ค์ ์ ๋ณด๋ Config ์ ๋ณด๋ฅผ ์ ์ฅํ๋๋ก ๋์์ธ ๋์๋ค๋ฉด , ๋ณด์์ด ์ค์ํ ํจ์ค์๋๋ API ํค , ์ธ์ฆ์ ํ์ผ๋ค์ Secret ์ ์ ์ฅ
skccadmin@SKCC18D00132:~/container-orchestration/yaml/configmap$ echo test | base64
dGVzdAo=
skccadmin@SKCC18D00132:~/container-orchestration/yaml/configmap$ echo dGVzdAo= | base64 --decode
test
$ az acr build --registry admin5acr --image cm-sandbox:v2 .
- Master์ ์ ์ฅ๋๊ณ 2M์ ์ ์ฝ์ด ์์.
- pod๊ฐ platform์๊ฒ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ ค์ฃผ๋ ์๋น์ค์.
- Probe Types : ์ฒดํฌํ๋ ๋ฐฉ์ - Command probe, HTTP probe, TCP probe
- Liveness Probes
- Readiness Probes : ์ค๋น๊ฐ ๋์๋์ง ํ์ธํด์ ์ค๋น๊ฐ ๋๋ฉด Traffice์ ์ ๋ฌํจ.
- autoscale out ๋๋ ์ค ์๋น์ค๋ฅผ ๋ณด๋ด์ง ์์.
- Difference between Liveness and Readiness
- Liveness probe ๋ ์ปจํ ์ด๋์ ์ํ๊ฐ ๋น์ ์์ด๋ผ๊ณ ํ๋จํ๋ฉด , ํด๋น Pod ๋ฅผ ์ฌ์์ํ๋๋ฐ ๋ฐํด
- Readiness probe ๋ ์ปจํ ์ด๋๊ฐ ๋น์ ์์ผ ๊ฒฝ์ฐ์๋, ํด๋น Pod ๋ฅผ ์ฌ์ฉํ ์ ์์์ผ๋ก ํ์ํ๊ณ , ์๋น์ค๋ฑ์์ ์ ์ธํ๋ค.
"๋จธ๋ฆฌ๋ ์ฐจ๊ฐ๊ฒ, ๊ฐ์ด์ ๋ฐ๋ปํ๊ฒ" | [Top]