2023.01.31
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์ฃผ์]
๐ฆ 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
๐ฆ 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 ๋ช ๋ น์ด๋ฅผ ํตํด์๋ ์์ ์ด ๊ฐ๋ฅํ๋ค
๐ฆ 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 ๋๋ ๊ฒ์ ํ์ธํ๊ธฐ
๐ฆ 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
์ดํ ์ ์คํ๋๋์ง ํ์ธ!
...?
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
๐ฆ 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
๐ฆ 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
sidecar
adapter
ambassador