K8s Cluster Upgrade
# k8s apt repository ๋ฆฌ์คํธ ํ์ผ ์์
echo -e "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /" > /etc/apt/sources.list.d/kubernetes.list
# apt ์
๋ฐ์ดํธ ํ kubeadm ์ต์ ๋ฒ์ ํ์ธ
apt update
apt-cache madison kubeadm
apt-get install kubeadm=1.32.0-1.1
kubeadm upgrade plan v1.32.0
kubeadm upgrade apply v1.32.0
kubectl get nodes
apt-get install kubelet=1.32.0-1.1
systemctl restart kubelet
kubectl get nodes
# ๋จผ์ node01 ์ ์คํ์ค์ธ Pod ์ drain ํ๊ณ
kubectl drain node01
# node01 ์ผ๋ก ์ ์ํ ๋ค
ssh node01
# k8s apt repository ๋ฆฌ์คํธ ํ์ผ ์์
echo -e "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /" > /etc/apt/sources.list.d/kubernetes.list
# apt ์
๋ฐ์ดํธ ํ kubeadm ์ต์ ๋ฒ์ ํ์ธ
apt update
apt-cache madison kubeadm
apt-get install kubeadm=1.32.0-1.1
kubeadm upgrade node config --kubelet-version v1.32.0
apt-get install kubelet=1.32.0-1.1
systemctl restart kubelet
exit
kubectl uncordon node01
k get deployments.apps -n=admin2406 -o=json
k get deployments.apps -n=admin2406 -o=custom-columns=DEPLOYMENT:.metadata.name,CONTAINER_IMAGE:.spec.template.spec.containers[0].image,READY_REPLICAS:.status.readyReplicas,NAMESPACE:.metadata.namespace > /opt/admin2406_data
Fix kubeconfig
# kubeconfig ํ์ผ์ ํ์ธํ๊ณ
kubectl get pods --kubeconfig /root/CKA/admin.kubeconfig
# ๊ธฐ๋ณธ ์ค์ ์ ํ์ธํ ๋ค
cat ~/.kube/config
# ํ๋ฆฐ ๋ถ๋ถ์ ์์ ํ๊ณ
vi /root/CKA/admin.kubeconfig
# ๋ค์ kubeconfig ํ์ผ์ ํ์ธ
kubectl get pods --kubeconfig /root/CKA/admin.kubeconfig
Rolling Update
kubectl create deployment nginx-deploy --image=nginx:1.16
kubectl set image deployment/nginx-deploy nginx=nginx:1.17
Fix PVC
# Deployment ํ์ธ
kubectl get deployment -n alpha alpha-mysql -o yaml | yq e .spec.template.spec.containers -
# Pod ์๋ฌ ํ์ธ
kubectl get pods -n alpha
kubectl describe pod -n alpha alpha-mysql-xxxxxxxx-xxxxx
# PV ํ์ธ
kubectl get pv alpha-pv
# PVC ์์
apiVersion : v1
kind : PersistentVolumeClaim
metadata :
name : mysql-alpha-pvc
namespace : alpha
spec :
accessModes :
- ReadWriteOnce
resources :
requests :
storage : 1Gi
storageClassName : slow
ETCD Backup
# etcd ์ค๋
์ท ์์ฑ
export ETCDCTL_API=3
etcdctl snapshot save /opt/etcd-backup.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
etcdctl snapshot status snapshot.db
Create Pod with Command and Secret Volume
# YAML ํ์ผ ์์ฑ
kubectl run secret-1401 -n admin1401 --image busybox --dry-run=client -o yaml --command -- sleep 4800 > admin.yaml
vi admin.yaml
# ํ์ํ ๋ถ๋ถ ์ถ๊ฐ
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: secret-1401
name: secret-1401
namespace: admin1401
spec:
volumes:
- name: secret-volume
secret:
secretName: dotfile-secret
containers:
- command:
- sleep
- "4800"
image: busybox
name: secret-admin
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: /etc/secret-volume
์ ํ
ETCD Backup, Restore
Control Plane Upgrade, kubeadm, kubelet, kubectl
Network Policy ๋ฐฐํฌ
Ingress ๋ฐฐํฌ
Deployment ๋ฐฐํฌ
Pod ์ label ํ ๋น ํ ๋ฐฐํฌ
WorkerNode Not Ready to Ready ํธ๋ฌ๋ธ์ํ
Node Selector ๋ฅผ ํตํด ํน์ Node ์ Pod ๋ฐฐํฌ
PVC ์์ฑ (PV ์ SC ๋ ์ฃผ์ด์ง) + kubectl edit ๋๋ kubectl patch ๋ก ์ฉ๋ ๋ณ๊ฒฝ
Pod ๋ก๊ทธ ํ์ธํ์ฌ ํน์ ๋จ์ด๊ฐ ๋ค์ด๊ฐ ๋ก๊ทธ ์ถ์ถ
Create Pod with multiple containers (8)
k -n mc-namespace run mc-pod --image=nginx:1-alpine -o=yaml --dry-run=client > mc-pod.yaml
vi mc-pod.yaml
# mc-pod.yaml
apiVersion : v1
kind : Pod
metadata :
namespace : mc-namespace
name : mc-pod
spec :
containers :
- name : mc-pod-1
image : nginx:1-alpine
env :
- name : NODE_NAME
valueFrom :
fieldRef :
fieldPath : spec.nodeName
- name : mc-pod-2
image : busybox:1
command :
- "sh"
- "-c"
- "while true; do date >> /var/log/shared/date.log; sleep 1; done"
volumeMounts :
- name : shared-volume
mountPath : /var/log/shared
- name : mc-pod-3
image : busybox:1
command :
- "sh"
- "-c"
- "tail -f /var/log/shared/date.log"
volumeMounts :
- name : shared-volume
mountPath : /var/log/shared
volumes :
- name : shared-volume
emptyDir : {}
k -n mc-namespace get pod
k -n mc-namespace logs mc-pod -c mc-pod-3 -f
Install container runtime (7)
~ ssh bob@node01
bob@node01's password:
bob@node01 ~ sudo su
root@node01 /home/bob cd /root
root@node01 ~ ls
cri-docker_0.3.16.3-0.debian.deb
root@node01 ~ dpkg -i ./cri-docker_0.3.16.3-0.debian.deb
root@node01 ~ systemctl enable cri-docker
root@node01 ~ systemctl status cri-docker
root@node01 ~ systemctl is-enabled cri-docker
enabled
Expose pod with Service (8)
controlplane ~ k get pods
NAME READY STATUS RESTARTS AGE
messaging 1/1 Running 0 4m2s
controlplane ~ k expose pod messaging --port=6379 --name=messaging-service
service/messaging-service exposed
controlplane ~ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 48m
messaging-service ClusterIP 172.20.26.32 <none> 6379/TCP 6s
References