
쿠버네티스를 간단히 설치해보고 클러스터를 구성해서 간단한 Pod를 실행해보자.
sudo systemctl enable/start docker
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab를 실행한다.swapoff -a를 실행해줘야 하는 번거로움이 있다.kubeadm init으로 쿠버네티스 클러스터를 초기화하고, control plane을 구성한다.disable_plugins = ["cri"]라는 줄이 문제를 발생시킨다.kubeadm init의 출력 중 일부인 아래 명령어를 입력해야 한다.mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml로 직접 경로를 지정해서 해결한다. kubeadm init을 입력하면 마지막 부분에 출력되는 token 및 명령어를 입력하여 control plane에 join한다.kubeadm join <CONTROL_PLANE_IP>:<PORT> --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>kubeadm token create --print-join-command을 입력하여 다시 token과 더불어 명령어를 포함한 값을 출력받는다.kubectl get pods --all-namespaces로 클러스터를 구성하는 Pods 생성 확인, control-plane의 필수 구성 요소들도 Pod로 생성된다.kubectl [command] [TYPE] [NAME] [flags]로 실행, []로 감싼 건 생략 가능kubectl api-resources 로 명령어 약어를 확인할 수 있다.kubectl [command] --help 로 명령어 reference를 확인한다.kubectl get [TYPE] -o {wide, yaml, json}로 현재 존재하는 [TYPE]의 정보에 접근할 수 있다.kubectl get에 --watch로 object 상태 log를 볼 수 있다.kubectl logs [pod명] -c [container명]: pod 안의 container 로그 출력kubectl run pods [POD_NAME] --image=httpd —port 80으로 간단한 웹 서버를 열 수 있다.kubectl describe [NAME]으로 실행되는 Pod의 IP 확인 후 curl & elinks로 웹페이지에 접속하여 확인한다.kubectl exec [POD_NAME] -it -- /bin/bashi로 표준 입력을 활성화하고 t로 터미널을 할당한 Pod가 실행하는 컨테이너 안에서 /bin/bash를 통해 bash 쉘을 실행한다.kubectl edit [TYPE] [NAME] 으로 실행중인 오브젝트를 수정할 수 있다.kubectl run [POD_NAME] --image=nginx:1.14 --port 80 --dry-run -o yaml > webserver-pod.yml: nginx 웹서버를 실제로 리소스를 생성하지 않고, 출력만 yml로 만들어서 yml 파일로 리다이렉션한다.-로 배열 문법을 사용한다.kubectl create -f webserver-pod.yml로 yaml 파일을 실행할 수 있다.추후 CNI에 대해서는 더 깊게 다룰 것이며(Jetson 환경에서 배포하며 삽질한 경험을 바탕으로), weavenet과 더불어 Calico와 Flannel를 알아볼 것이다.