Kubectl 실습하기
Kubectl 실습 해 보기
1. Kubectl 사용 환경 설정
1.1. Vagrant를 사용한 kubectl
https://github.com/techiescamp/vagrant-kubeadm-kubernetes
를 클론하여 vagrant로 실행되는 쿠버네티스 클러스터를 생성하자.
해당 사이트는 쿠버네티스 클러스터를 자동으로 설정하기 위한 Vagrant 파일 및 스크립트들로 이루어져 있다.
이를 실행, 실행확인, 종료하며 vagrant와 쿠버네티스에 대해 익숙해져보자
> git install https://github.com/techiescamp/vagrant-kubeadm-kubernetes
> vagrant up
> vagrant status
> vagrant ssh controlplane
~$ kubectl get nodes
~$ exit
> vagrant destory
1.2. Docker Desktop으로 Kubectl 실행
환경설정에 들어간 뒤 위와 같이 Kubernetes 옵션을 켜 주고 Apply&restart를 눌러준다.
이후 kubectl 명령어를 사용해 생성된 노드들을 조회할 수 있다.
D:\새싹-금천구\클라우드\k8s\vagrant-kubeadm-kubernetes>kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 30m v1.29.2
2. Kubectl 기본 실습
도커 이미지를 도커 허브에서 받아와 모든 노드에서 실행하려고 한다. control plane에 도커를 설치한 뒤 다음 작업을 실행 해 보자
- 도커 허브 계정 정보를 갖고 있는 시크릿 생성
~$ kubectl create secret docker-repository regcred --docker-service=https://index.docker.io/v1/ --docker-username=******** --docker-password=*********
- docker-repository: 시크릿 유형
- regcred: 시크릿 이름
- 특정 시크릿을 imagePullSecrets의 기본값으로 할당
### 1. 클러스터 내 서비스 계정 목록 조회 $ kubectl get serviceaccount ### 2. default 네임스페이스 내 default 서비스 계정의 상세 정보 조회 $ kubectl describe serviceaccount default -n default ### 3. default 서비스 계정에 1에서 생성한 regcred 시크릿 연결 $ kubectl patch -n default serviceaccount/default -p '{"imagePullSecrets":[{"name":"regcred"}]}' ### 4. 업데이트 확인 $ kubectl describe serviceaccount default -n default
-
nginx 컨테이너로 구성된 파드 생성
case 1. 기본 제공 이미지로 파드 생성
$ kubectl run my-nginx-pod-cli --image=nginx:latest --port 80
case 2. YAML 파일을 작성하여 파드 생성
a. controlplane 노드에서 아래 파일 생성apiVersion: v1 # YAML 파일에서 정의된 오브젝트의 API 버전 kind: Pod # 리소스의 종류 metadata: # 라벨, 주석(annotation), 이름과 같은 리소스의 부가 정보 name: my-nginx-pod spec: # 리소스 생성을 위한 정보 containers: - name: my-nginx-contianer image: nginx:latest ports: - containerPort: 80 protocol: TCP
b. 실행 : $ kubectl apply -f nginx-pod.yml
- Pod 실행 확인
$ kubectl get pods -o wide
위 명령어를 입력하면 STATUS 항목에서 pod의 생성 현황을 볼 수 있다.
가질 수 있는 상태값들은 다음과 같다.- ContainerCreating: 컨테이너 생성중 - Running: 파드가 클러스터의 특정 노드에 배치되었으며 내부의 모든 컨테이너가 생성 완료된 상태
- ErrImagePull: 이미지 풀 실패
- ImagePullBackOff: 지정된 컨테이너 이미지 가져오기 실패
만약 실패했다면 아래 명령어를 입력하여 로그를 찾아보자.
$ kubectl describe pod <pod이름>
만약 다음과 같은 에러가 나타났다면 입력한 계정이 잘못된 것이므로 secret를 삭제 후 재생성 해 주어야 한다.
Failed to pull image "nginx:latest": initializing source docker://quay.io/nginx:latest: unable to retrieve auth token: invalid username/password: unauthorized: Invalid Username or Password
- Control plane 노드에서 다른 노드로 이동하기
- vagrant 기본 비밀번호: vagrant
### 1. 현재 실행중인 pod들의 정보 보고 현재 실행중인 pod의 ip 조회 $ kubectl get pods -o wide NAME ... IP NODE my-nginx-pod 172.16.196.134 node01 ... ### 2. 해당 ip와의 연결 확인 $ curl 172.16.196.134 ### 3. ssh 명령어를 사용해 다른 node로도 접근이 가능하다. $ ssh vagrant@10.0.0.11
10.0.0.10
: 쿠버네티스 클러스터에서 기본 할당되는 IP. 여기서 1씩 증가한다.
- Pod 삭제
$ kubectl delete [-f] <podname>
- -f 옵션:
kubectl apply -f
로 생성한 객체를 제거할 땐 -f 옵션 사용
- -f 옵션: