Kubernetes_3

์ตœ์‹œ์—ดยท2023๋…„ 1์›” 31์ผ
0

2023.01.31

5์žฅ pod


์‹ค์Šต 1

  • workspace ๋งŒ๋“ค๊ธฐ
mkdir workspace
cd workspace

๐Ÿ’ฆ app.js ๋ฐ dockerfile ์ƒ์„ฑ

cat > app.js

const http = require(โ€˜httpโ€™);
const os = require(โ€˜osโ€™);
console.log(โ€œTest Server starting!!!โ€);
var handler = function(req, res) {
  res.writeHead(200);
  res.end(โ€œContainer Hostname:โ€ + os.hostname() + โ€œ\nโ€);
};
var www = http.createServer(handler);
www..listen(8080);

cat > dockerfile

FROM node:12
COPY app.js /app.js
ENTRYPOINT [โ€œnodeโ€, โ€œapp.jsโ€]

๐Ÿ’ฆ docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ฐ push

๐Ÿ’จ docker์— ๋กœ๊ทธ์ธ
sudo -i docker login

๐Ÿ’จ ๋„์ปคํŒŒ์ผ ๋นŒ๋“œ
docker build -t smlinux/appjs .

๐Ÿ’จ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€ ํ‘ธ์‰ฌ
docker push smlinux/appjs

docker ๊ถŒํ•œ ๋ฌธ์ œ(Permission denied)

๐Ÿ’จ docker ๊ทธ๋ฃน ์ƒ์„ฑ (์ด๋ฏธ ์žˆ์„ ์ˆ˜ ์žˆ์Œ)
sudo groupadd docker

๐Ÿ’จ ๊ทธ๋ฃน์— docker ๊ถŒํ•œ ์ถ”๊ฐ€
sudo usermod -aG docker $USER

๐Ÿ’จ ๋‚˜๊ฐ”๋‹ค ๋“ค์–ด์™€์„œ id ํ™•์ธ(docker ์ถ”๊ฐ€ ๋๋Š”์ง€)
exit
id

๐Ÿ’ฆ ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€ pod๋กœ(docker hub๊ฐ€ ์•ˆ๋ผ์„œ ์ด๋Œ€๋กœ ํ–ˆ์Œ...)

kubectl run webserver --image=nginx:1.14

kubectl get pods

๐Ÿ’ฆ ์ƒ์„ฑํ•œ pod๋ฅผ yamlํŒŒ์ผ๋กœ ๋ฐ›์•„์„œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

kubectl run webserver --image=nginx:1.14 --dry-run -o yaml > pod-nginx.yaml

vim pod-nginx.yaml
----------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: webserver
spec:
  containers:
  - image: nginx:1.14
    name: nginx-container
    ports:
    - containerPort: 80
      protocol: TCP
      

๐Ÿ’ฆ ์ƒ์„ฑํ•œ pod๋ฅผ ์ง€์šฐ๊ณ  yamlํŒŒ์ผ๋กœ ์ƒˆ๋กœ์šด pod ์ƒ์„ฑ

kubectl delete pod webserver

kubectl apply -f pod-nginx.yaml

kubectl describe pod webserver

curl [ip์ฃผ์†Œ]

์‹ค์Šต 2 : ๋ฉ€ํ‹ฐํŒŒ๋“œ

๐Ÿ’ฆ yaml ํŒŒ์ผ ์ƒ์„ฑ

cat > pod-multi.yaml

apiVersion: v1
kind: Pod
metadata:
  name: multipod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
  - name: centos-container
    image: centos:7
    command:
    - sleep
    - "10000"
๐Ÿ’จ pod ์ƒ์„ฑ
kubectl apply -f pod-multi.yaml

๐Ÿ’จ ์‹คํ–‰๋˜๋Š” pod ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ
kubectl exec multipod -it -c centos-container -- /bin/bash

๐Ÿ’จ ์•ˆ์œผ๋กœ ๋“ค์–ด์™€์„œ ํ™•์ธ
ps -ef
------------------------------------------------------
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 02:03 ?        00:00:00 sleep 10000
root           7       0  0 02:06 pts/0    00:00:00 /bin/bash
root          23       7  0 02:06 pts/0    00:00:00 ps -ef
------------------------------------------------------

๐Ÿ’จ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธ
curl http://localhost:80

exit

๐Ÿ’จ log ํ™•์ธ 
kubectl logs multipod -c nginx-container
kubectl logs multipod -c centos-container

๐Ÿ’จ ์‹คํ–‰๋˜๋Š” pod์˜ ๋‚ด์šฉ ์ˆ˜์ •
kubectl edit pod multipod

kubectl delete pod multipod

์‹ค์Šต 3: ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๋Š” liveness

๐Ÿ’ฆ yaml ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

cp pod-nginx.yaml pod-nginx-liveness.yaml

vim pod-nginx-liveness.yaml
--------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: nginx-liveness
spec:
  containers:
  - image: nginx:1.14
    name: nginx-container
    ports:
    - containerPort: 80
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 80

kubectl apply -f pod-nginx-liveness.yaml

++ ์ถ”๊ฐ€: ์„ค์ • ๋ฐ”๊ฟ”์ฃผ๊ธฐ

cp pod-nginx-liveness.yaml pod-nginx-livenessProbe.yaml

vim pod-nginx-livenessProbe.yaml
------------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: nginx-liveness-modified
spec:
  containers:
  - image: nginx:1.14
    name: nginx-container
    ports:
    - containerPort: 80
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 15
      periodSeconds: 20
      timeoutSeconds: 1
      successThreshold: 1
      failureThreshold: 3

&& kubectl edit pod nginx-liveness ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ๋„ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค


์‹ค์Šต 4: busybox

๐Ÿ’ฆ yaml ํŒŒ์ผ ์ƒ์„ฑ

cat > liveness-exam.yaml
-------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exam
spec:
  containers:
  - name: busybox-container
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - ls
        - /tmp/healthy
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

๐Ÿ’ฆ ์‹คํ–‰

kubectl apply -f liveness-exam.yaml

watch kubectl get pods -o wide
๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด restart ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ

์‹ค์Šต 5: init

๐Ÿ’ฆ yaml ํŒŒ์ผ ์ƒ์„ฑ

cat > init-container-exam.yaml
----------------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

๐Ÿ’ฆ ์‹คํ–‰

kubectl apply -f init-container-exam.yaml

watch kubectl get pods -o wide
๐Ÿ’จ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด status๊ฐ€ initialize ๋Œ€๊ธฐ์ค‘์ธ์ง€ ํ™•์ธ
(init ๋Œ€๊ธฐ์ค‘์ž„..!)

cat > init-container-exam-svc.yaml
-------------------------------------
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
   
   
cat > init-container-exam-mydb.yaml
-----------------------------------------
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

kubectl apply -f init-container-exam-svc.yaml
kubectl apply -f init-container-exam-mydb.yaml

์ดํ›„ ์ž˜ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธ!

์‹ค์Šต 6: infra container

...?

์‹ค์Šต 7: static container

work-node์—์„œ /etc/kubernetes/manifests๋กœ ์ ‘๊ทผ.

vi /var/lib/kubelet/config.yaml์—์„œ staticPodPath์˜ ๊ฒฝ๋กœ ํ™•์ธ

web.yaml
----------------------------------------
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: web
  name: web
spec:
  containers:
  - image: nginx:1.14
    name: web
    ports:
    - containerPort: 80
web-node1 ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ pod ์ƒ์„ฑ
cp web.yaml /etc/kubernetes/manifests/

pod ์‚ญ์ œ
rm /etc/kubernetes/manifests/web.yam

์‹ค์Šต 8: pod resource

๐Ÿ’ฆ yaml ํŒŒ์ผ ์ƒ์„ฑ

cat > pod-resource.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-env
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP
    resources:
      requests:
        memory: 500Mi
        cpu: 200m
      limits:
        memory: 1Gi
        cpu: 1

๐Ÿ’ฆ ์‹คํ–‰ ๋ฐ ํ™•์ธ

kubectl apply -f pod-resource.yaml

๐Ÿ’จ container ๋ถ€๋ถ„ ํ™•์ธํ•ด๋ณด๊ธฐ
kubectl describe pod nginx-pod-env

์‹ค์Šต 9: ํ™˜๊ฒฝ๋ณ€์ˆ˜

๐Ÿ’ฆ yaml ํŒŒ์ผ ์ƒ์„ฑ

cat > pod-nginx-env.yaml
--------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-env
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP
    env:
    - name: MYVAR
      value: "testvalue"

๐Ÿ’ฆ ์‹คํ–‰ ๋ฐ ํ™•์ธ

kubectl apply -f pod-nginx-env.yaml

kubectl exec nginx-pod-env -- env
-----------------------------------------------------------------------
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx-pod-env
NGINX_VERSION=1.14.2-1~stretch
NJS_VERSION=1.14.2.0.2.6-1~stretch
MYVAR=testvalue
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
HOME=/root

pod ๊ตฌ์„ฑ ์‹คํ–‰ํŒจํ„ด

sidecar
adapter
ambassador

profile
์ตœ์‹œ์—ด

0๊ฐœ์˜ ๋Œ“๊ธ€