CKA 시험 공부 2
Node-1
별도 Cluster의 접근 없이 node-1에서 주어진 문제 풀이
Etcd 스냅샷을 하는데 TLS를 이용
- Endpoint : https:127.0.0.1:2379
- Path : /snapshot/etcd.db
- Version : 3.2.12
- CA : /tls/ca.crt, Client Cert : /tls/client.crt, Client Key : /tls/client.key
문제풀이
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#built-in-snapshot
ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert /tls/ca.crt --cert /tls/client.crt --key /tls/client.key snapshot save /snapshot/etcd.db
ETCDCTL_API=3 etcdctl --write-out=table snapshot status /snapshot/etcd.db
내 Cluster에서 해볼려면..
cd /etc/kubernetes/pki/etcd 에 있는 ca.crt, server.crt, server.key 파일을 내용을 메모장에 복사한 후
아래 명령으로 Pod로 설치되어 있는 etcd로 들어갑니다.
kubectl exec -n kube-system etcd-k8s-master -it -- sh
그리고 해당 Pod 안에서 메모장에 복사해 놓은 ca.crt, server.crt, server.key파일을 만들고.
ETCDCTL_API=3 etcdctl --help 명령으로 --cacert, --cert, --key 들의 옵션 이름을 확인합니다.
ETCDCTL_API=3의 의미는 ectd version 3 api를 날린다는 의미인데 version마다 위에 옵션 이름이 달라짐.
예를들어 다른 버전에서는 --cacert를 --ca-file로 사용하기 때문에 --ca-file을 version 3 api 명령에 넣으면 에러가 남
그리고 아래 명령으로 snapshot을 만듬
ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert ca.crt --cert server.crt --key server.key snapshot save snapshot.db
마지막으로 확인
ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshot.db
ek8s Cluster
ek8s cluster에서 작업하는 문제
kubectl config use-context ek8s
name=ek8s-node-0로 라벨이 달린 노드를 사용불가하게 만들고, 해당 노드위에 있는 Pod들은 모두 reschedule함
문제풀이
https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/
kubectl get node --show-labels |grep name=ek8s-node-0
kubectl drain ek8s-node-0 --ignore-daemonsets --force
내 Cluster에서 해볼려면..
내 node1에 라벨 등록
kubectl label nodes k8s-node1 name=k8s-node1
등록된 라벨로 node 조회
kubectl get node --show-labels |grep name=k8s-node1
Drain 하기
kubectl drain k8s-node1 --ignore-daemonsets --force
확인
kubectl get node
복구
kubectl uncordon k8s-node1
wk8s Cluster
wk8s cluster에서 작업하는 문제
kubectl config use-context wk8s
wk8s-node-0의 State가 NotReady인데 원인을 찾아서 Ready상태로 되게 만들어라
- ssh wk8s-node-0
- sudo -i
문제풀이
SSH로 해당 Node 접근
ssh wk8s-node-0
해당 문제의 원인은 kubelet이 기동되지 않은 상태였음
kubelet 상태 확인
systemctl status kubelet
kubelet 기동
systemctl start kubelet
systemctl enable kubelet
wk8s-node-1에 Static Pod를 만들어라
- ssh wk8s-node-1
- sudo -i
- image(nginx), name(static-web)
- file path : /etc/kubernetes/manifests
문제풀이
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
해당 node에 접근해서 root권한으로 작업
ssh wk8s-node-1
sudo -i
문제에 주어진 파일 경로로 들어가서
cd /etc/kubernetes/manifests
yaml 파일을 만들어 놓음
cat <<EOF >static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF
kubelet의 config.yaml 파일 찾기
find / -name kubelet
cd /var/lib/kubelet
해당 파일에 들어가서 staticPodPath 속성 및 경로 추가
vi config.yaml
---------------
staticPodPath: /etc/kubernetes/manifests
---------------
kubelet 재기동
systemctl restart kubelet
그러면 kubelet이 재기동 되면서 /etc/kubernetes/manifests에 있는 yaml 파일들을 모두 실행함
bk8s Cluster
bk8s cluster에서 작업하는 문제
kubectl config use-context bk8s
bk8s의 Cluster 장애 문제
- ssh bk8s-master-0, bk8s-node-0
- sudo -i
문제풀이
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
문제의 원인은 Master Pod의 Static Pod들이 실행되지 않고 있었음.
해당 Master에 접근해서 root권한으로 작업
ssh bk8s-node-1
sudo -i
아래 경로에 파일들은 정상적으로 존재함
cd /etc/kubernetes/manifests
kubelet config 파일을 찾아서 내용을 확인해보면
cd /var/lib/kubelet
vi config.yaml
아래 설정에 path가 잘못되어 있기 때문에 제대로 수정함
staticPodPath: /etc/kubernetes/manifests
그리고 kubelet 재기동
systemctl restart kubelet
각 컴포넌트들이 정상적으로 기동되고 있는지 확인
kubectl get cs
hk8s Cluster
hk8s cluster에서 작업하는 문제
kubectl config use-context hk8s
hostPath타입의 PV를 만드는 문제
- name : task-pv-volume
- capacity : 10Gi
- accessModes : ReadWriteOnce
- volumeType : hostPath
- Path : /mnt/data
문제풀이
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
위 내용으로 yaml파일을 만든다음 kubectl apply -f 파일명.yaml로 생성
ik8s Cluster
22번쯤 나오는 문제이나 시간이 오래 걸리기 때문에 Skip하고 가장 마지막에 푸시기 바랍니다.
ik8s-master-0과 ik8s-node-0을 이용해서 Cluster 설치
- kubeadm 이용
- Docker는 사전에 설치되어 있음
- –ignore-preflight-errors=all 옵션 추가
- 설치시 Config File 위치 : /etc/kubeadm.conf
문제풀이
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow
위에 링크들을 참고해서 설치
kubeadm init --ignore-preflight-errors=all --config /etc/kubeadm.conf
node join시 아래 명령 참고 master 설치 후 나오는 token URL에 –ignore-preflight-errors=all 부분 추가
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --ignore-preflight-errors=all --discovery-token-ca-cert-hash sha256:<hash>