0. 실습환경 구성

이전 시간에 배웠던 내용 준비!

  • 카타코다
  • Play with Kubernetes
  • VM 직접설치

1. kubectl

Master node(control plane)에서 쿠버네티스를 통해 각 노드에게 서비스 실행을 요청하는 명령어
# 명령어 기본구조
kubectl [command] [type] [name] [flags]
  • command - 자원에 대해 실행할 명령
  • type - 자원의 종류
  • name - 자원의 이름
  • flags - 옵션
kubetl get pod webserver -o wide
kubectl --help
kubectl command --help

kubectl run [resource name] [option]
kubectl create -f obj.yaml
kubectl apply -f obj.yaml

kubectl get [resource name] [object name]
kubectl edit [resource name] [object name]
kubectl describe [resource name] [object name]

kubectl delete pod main

[실습]

그 전에! 재부팅을 했다면,

아마 x509 인증서 문제로 kubectl 명령어가 정상 작동하지 않을 수 있습니다!

더보기

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

따라서 다음과 같은 명령어를 입력하여 해결해줍니다.

# 출처 - https://jmholly.tistory.com/entry/%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0-Unable-to-connect-to-the-server-x509-certificate-signed-by-unknown-authority-possibly-because-of-cryptorsa-verification-error-while-trying-to-verify-candidate-authority-certificate-kubernetes
unset KUBECONFIG
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

또한!

아마 Worker node에서 Master node와 상호 신뢰를 구축하는 token이 만료(24시간)가 되어 새로운 연결을 해야할 것입니다.

더보기

[preflight] Running pre-flight checks
        [WARNING FileExisting-tc]: tc not found in system path

따라서 다음과 같은 명령어를 입력하여 새로운 연결 토큰을 생성하고 Worker node 에 입력해줍니다.

#출처 - https://coder-question-ko.com/cq-ko-blog/74129
kubeadm token create --print-join-command		#token 정보 출력

 

kubectl api-resources		#명령어 목록 및 약어 정보 확인

kubectl [command] [--help]		#명령어 도움말 확인

kubectl get nodes		#노드들에 대한 정보 확인
kubectl get nodes -o wide		#노드들에 대한 상세 정보 확인
kubectl describe node masterexamplecom		#한 노드에 대한 전체 정보 확인

# - 한개인 명령어 = systemfive 계열 명령어(옵션명이 짧다)
# -- 두개인 명령어 = BSD 계열 명령어(옵션명이 길다)

kubectl run	webserver --image=nginx:1.14 --port	80		#pod 생성
#run = container pod 를 만드는 명령 / 이름 / 실행할 컨테이너 이미지 및 버전 / 웹서버 - 프로그램이 실행되면서 80번 포트(기본 웹서버 포트)를 열어 client 대기하며 LISTEN

kubectl get pods		#pod 정보 확인
kubectl describe pod webserver		#pod 정보 전체 확인 - 실행 정도 확인 가능
kubectl get pods -o wide		#pod 정보 상세 확인 - 어떤 노드에서 실행하고 있는지 확인가능

curl [ip]		#crul = Linux CLI 웹브라우저

kubectl create deployment mainui --image=httpd --replicas=3 	#create deployment = pod를 여러개 생성할경우(create와 run이 다른 점) / httpd = Appache 웹 서버 / replics=[num] num 만큼 생성

kubectl get pod webserver -o yaml		# pod를 yaml 형태로 열기도 가능
kubectl get pod webserver -o json		# pod를 json 형태로 열기도 가능
#컨테이너 내부로 접속(nginx)
kubectl exec webserver -it -- /bin/bash		#exec = pod 실행 -/ -it = 터미널을 통한 상호작용 / /bin/bash bash셸 사용

cd /usr/share/nginx/html/
ls
cat index.html
echo "kindongsy Web" > index.html
exit

curl 10.47.0.1

kubectl logs webserver		#webserver log 정보

kubectl port-forward webserver 8080:80		# 외부에서 접속

//다른 세션
curl localhost:8080

kubectl get deployments.apps
kubectl edit deployments.apps mainui		#동작중인 app 수정

...
sepc:
	...
    replicas: [num]		#[num] 수정하면 개수 변경 가능


kubectl get deployments.apps

#미리 yaml 파일을 만들어서 create 명령어를 통해 App 실행

kubectl run webserver --image=nginx:1.14 --port 80		#이미 존재 - error
kubectl run webserver --image=nginx:1.14 --port 80 --dry-run		#실행되는지 상태 확인
kubectl run webserver --image=nginx:1.14 --port 80 --dry-run -o yaml		#해당 상태를 yaml 파일로
kubectl run webserver --image=nginx:1.14 --port 80 --dry-run -o yaml > webserver-pod.yaml		#쿠버네티스가 사용하는 yaml 파일 생성

vim webserver-pod.yaml

...
creationTimestamp: null		#해당 부분삭제
...
spec:
	...
	resource: {}		#resource 부터 마지막 행까지 삭제
    ...
    
kubectl get pods

kubectl delete pod webserver		#이름이 중복되므로 실행안됨
kubectl get pods

kubectl delete deployments.apps mainui
kubectl get pods

kubectl cerate -f webserver-pod.yaml
kubectl get pods -o wide