이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Kubernetes/Kubernetes 이론

udemy kubernetes 강의 : Lightning Lab - 1 답 정리

이쿠우우 2021. 7. 24. 18:15
반응형

 

 

udemy kubernetes 강의 : Lightning Lab - 1 답 정리

 

진행한 udemy 강의 링크

Certified Kubernetes Administrator (CKA) with Practice Tests

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/

 

 

목표

Lightning Lab - 1 강의 test를 100%로 통과하기

 

 


 

1번.

 

 

[controlplane Node]

 

(업그레이드할 버전 결정)

apt update

apt-cache madison kubeadm

 

(controlplane node kubeadm 업그레이드)

apt-mark unhold kubeadm && \

apt-get update && apt-get install -y kubeadm=1.19.0-00 && \

apt-mark hold kubeadm

 

(kubeadm version 확인)

kubeadm version

 

(업그레이드 계획을 확인)

kubeadm upgrade plan

 

(kubernetes cluster update를 위해 kubeadm를 선택한 version으로 패치함.)

sudo kubeadm upgrade apply v1.19.0

 

 

(노드 드레인)

kubectl drain controlplane  --ignore-daemonsets

 

(kubelet과 kubectl 업그레이드)

apt-mark unhold kubelet kubectl && \

apt-get update && apt-get install -y kubelet=1.19.0-00 kubectl=1.19.0-00 && \

apt-mark hold kubelet kubectl

 

 

(kubelet을 다시 시작)

sudo systemctl daemon-reload

sudo systemctl restart kubelet

 

 

(노드 uncordon)

kubectl uncordon controlplane 

 

(결과)

 

 

[node01 Node]

 

(node 01 접속)

ssh node01

 

(kubeadm 업그레이드)

apt-mark unhold kubeadm && \

apt-get update && apt-get install -y kubeadm=1.19.0-00 && \

apt-mark hold kubeadm

sudo kubeadm upgrade node

 

(노드 드레인)

exit 명령으로 다시 controlplane node로 와서 명령 수행

kubectl drain node01 --ignore-daemonsets

해당 명령 후 pod가 controlplane으로 이동했는지 확인

(kubelet과 kubectl 업그레이드)

다시 node01로 접속 : ssh node01

apt-mark unhold kubelet kubectl && \

apt-get update && apt-get install -y kubelet=1.19.0-00 kubectl=1.19.0-00 && \

apt-mark hold kubelet kubectl

 

(kubelet을 다시 시작)

sudo systemctl daemon-reload

sudo systemctl restart kubelet

 

 

(노드 uncordon)

exit 명령으로 다시 controlplane node로 와서 명령 수행

kubectl uncordon controlplane 

 

(결과)

 

 

참고 kubernetes docs 링크

https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

 

 


 

2번.

[배포 되어있는 deployment 확인]

kubectl get deployment -n admin2406

 

[deployment json형식 확인을 위해 예제 1개만 json으로 출력]

kubectl get deployment deploy1 -n admin2406 -o json

 

[json 상태 확인 후 답 입력]

kubectl -n admin2406 get deployment -o custom-columns=DEPLOYMENT:.metadata.name,CONTAINER_IMAGE:.spec.template.spec.containers[].image,READY_REPLICAS:.status.readyReplicas,NAMESPACE:.metadata.namespace --sort-by=.metadata.name > /opt/admin2406_data

 

참고 kubernetes docs 링크

https://kubernetes.io/docs/reference/kubectl/overview/#sorting-list-objects

https://kubernetes.io/docs/reference/kubectl/overview/#custom-columns

 

 


3번.

cat /root/CKA/admin.kubeconfig

파일을 확인해보면

server: https://172.17.0.28:2379 항목이 있는데

2379 port는 etcd가 사용하는 port 임

kube-apiserver에 붙기 위해서는 6443 port를 사용해야함.

 

해당 부분을 6443으로 변경해야함.

 


 

 

4번.

 

 

[deployment.yaml]

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deploy

  labels:

    app: nginx

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.16

        ports:

        - containerPort: 80

 

[deployment 생성 명령]

kubectl apply -f deployment.yaml

 

[deployment Rolling update]

kubectl --record deployment.apps/nginx-deploy set image deployment.v1.apps/nginx-deploy nginx=nginx:1.17

 

참고 kubernetes docs 링크

https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment

 


5번.

 

[pod 상태 확인]

kubectl get all -n alpha

kubectl describe pod/alpha-mysql-68c6b855bb-ztscr -n alpha

(결과)

원인이 persistentvolumeclaim "mysql-alpha-pvc" not found 임을 확인.

 

[pvc 확인]

kubectl get pvc -n alpha

mysql-alpha-pvc가 없음.

 

[pv 확인]

kubectl get pv -n alpha

확인후 어떤 storagecalss 를 사용하는지 확인

kubectl describe pv alpha-pv -n alpha

(결과)

slow storageclass를 사용.

 

[pvc.yaml]

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  annotations:

  name: mysql-alpha-pvc

  namespace: alpha

spec:

  accessModes:

  - ReadWriteOnce

  resources:

    requests:

      storage: 1Gi

  storageClassName: slow

 

[pvc 생성]

kubectl apply -f pvc.yaml

 

[pvc 확인]

kubectl get pvc -n alpha

bound 상태 확인

 

[pod 상태 확인]

kubectl get all -n alpha

 

running 상태 확인.

 

참고 kubernetes docs 링크

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

 


 

6번.

[etcd pod이름 확인]

kubectl get all -n kube-system

kubectl describe pod/etcd-controlplane -n kube-system

결과에서 cacert, cert, key 항목 확인.

 

[etcd backup]

 

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \

  --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \

  snapshot save /opt/etcd-backup.db

 

 

참고 kubernetes docs 링크

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#snapshot-using-etcdctl-options

 

 

 


 

7번.

[pod yaml]

apiVersion: v1

kind: Pod

metadata:

  name: secret-1401

  namespace: admin1401

  labels:

    run: secret-1401

spec:

  containers:

  - command:

    - sleep

    args:

    - "4800"

    image: busybox

    name: secret-admin

    volumeMounts:

    - name: secret-volume

      readOnly: true

      mountPath: "/etc/secret-volume"

  volumes:

  - name: secret-volume

    secret:

      secretName: dotfile-secret

 

 

참고 kubernetes docs 링크

https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

 


 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

반응형