- 도커/쿠버네티스 A-Z 모두 배우는 6개월 집중 부트캠프
- 6개월 교육 과정 내 강의 노트와 과제 업로드
실습 환경
- 순서
- VMware Fusion Player 설치 및 실행
- VMware Fusion에 Ubuntu 운영체제 설치
- Ubuntu에 Docker 설치
VMware Fusion Player – 12.1.2 (for Intel-based Macs) / Personal Use License - Binaries
Ubuntu - Bionic Beaver 18.04.5(LTS)
- 설치
ubuntu-18.04.6-live-server-amd64.iso
- 설치 시 mirror address 변경
http://kr.archive.ubuntu.com/ubuntu >>> http://mirror.kakako.com/ubuntu (new)
- 계정 설정
username : jaenyeong password : **** - 설치 완료 후 Vmware IP 확인 (ifconfig)
- 172.16.248.2/24
SSH(Secure Shell) 접속 (22 포트)
- 접속
sudo ssh jaenyeong@172.16.248.2 - ssh config 설정
- 편집기, 에디터 등으로
~/.ssh/config실행,HOSTNAME설정## Docker&KBS Host docker_vm HostName 172.16.248.2 user jaenyeong
- 편집기, 에디터 등으로
Docker - Docker Engine on Ubuntu 20.10.8 (community)
- 설치
- 로컬 터미널에서 SSH로 서버에 붙어 도커 설치 (위 SSH 접속방법대로 접속)
- 도커 저장소 설치 (저장소를 통해 도커 설치 및 업데이트 가능)
[1] 패키지 매니저 업데이트 $ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release > 계속 진행을 원하냐는 질문에 y 입력 [2] 도커 공식 GPG 키 추가 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg [3] 안정화 버전의 저장소를 위한 설정 $ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - 도커 엔진 설치
[1] 패키지 매니저 업데이트 $ sudo apt-get update [2-1] 최신 버전의 도커 엔진 설치 $ sudo apt-get install docker-ce docker-ce-cli containerd.io > 계속 진행을 원하냐는 질문에 y 입력 [2-2] 특정 버전의 도커 엔진 설치 $ apt-cache madison docker-ce [or] $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io [3] 정상적으로 도커 엔진이 설치 되었는지 확인 $ sudo docker version $ sudo docker system info [4] 헬로우월드 이미지를 실행해 정상적으로 설치 되었는지 확인 $ sudo docker container run hello-world
kakao i cloud - Virtual Machine 인스턴스 생성
- 레드햇(안정성), 우분투(빠른 기술 확장)
- 센토스는 레드햇과 비슷 > 현재 카카오는 센토스를 많이 사용함
- 기본(마스터) 인스턴스 생성
- 인스턴스명 (3개 생성)
kjn-master-01kjn-master-02kjn-master-03
- 인스턴스 설명
수강생 김재녕
- 인스턴스 타입
a1.2c4m(기본) 선택
- 볼륨 타입 크기
10GiB
- 키페어
kjn01이름으로 키페어 생성, 다운로드
- 네트워크 구성
- 네트워크
likelion-private01선택- 서브넷
likelion-private01 (172.30.4.0/22)- 사용 중인
IP125개, 사용 가능한IP1008개
- 사용 중인
- 서브넷
public선택 시 아직 카카오에서 외부에서 접근할 공개IP포워딩 기능이 구현되지 않은 듯함
- 네트워크
- 시큐리티 그룹
- 인바운드
- default (프로토콜 - all), (패킷 출발지 - @default), (포트 번호 - all)
- default (프로토콜 - tcp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - all)
- default (프로토콜 - tcp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - 22)
- 아웃바운드
- default (프로토콜 - all), (패킷 출발지 - @default), (포트 번호 - all)
- default (프로토콜 - icmp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - all)
- 인바운드
- 인스턴스명 (3개 생성)
- 워커 인스턴스 생성
- 인스턴스명 (2개 생성)
kjn-worker-01kjn-worker-02
- 인스턴스 설명
수강생 김재녕
- 인스턴스 타입
a1.2c4m(기본) 선택
- 볼륨 타입 크기
20GiB
- 키페어
- 위 인스턴스와 동일한 키페어 사용
- 네트워크 구성
- 네트워크
likelion-private01선택- 서브넷
likelion-private01 (172.30.4.0/22)- 사용 중인
IP133개, 사용 가능한IP1008개
- 사용 중인
- 서브넷
public선택 시 아직 카카오에서 외부에서 접근할 공인IP포워딩 기능이 구현되지 않은 듯함
- 네트워크
- 시큐리티 그룹
- 인바운드
- default (프로토콜 - all), (패킷 출발지 - @default), (포트 번호 - all)
- default (프로토콜 - tcp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - all)
- default (프로토콜 - tcp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - 22)
- 아웃바운드
- default (프로토콜 - all), (패킷 출발지 - @default), (포트 번호 - all)
- default (프로토콜 - icmp), (패킷 출발지 - 0.0.0.0/0), (포트 번호 - all)
- 인바운드
- 인스턴스명 (2개 생성)
Virtual Machine IPkjn-master-01-172.30.5.108kjn-master-02-172.30.4.36kjn-master-03-172.30.7.28kjn-worker01-172.30.6.245kjn-worker02-172.30.7.0
- 사설
IP로 인스턴스 생성 테스트
환경 구성
공인 IP-사설 IP- 연결 방법
- 전용선
- VPN
- 클래스 A
- 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
- 클래스 B
- 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
- 클래스 C
- 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16)
- 연결 방법
Bastion Host- 중간 연결 프록시 (로드 밸런서)
- 일반적으로 신뢰할 수 없는 네트워크 차단 등이 목적
- 어떤
공인 IP든지 허가되었다면 카카오 내부 망에 접속 가능하게 포워딩 서버 (터널링)
Open VPN- 패킷 외부
PC 공인 IP (OpenVPN Client)-Bastion Host 공인 IP (OpenVPN Server)
- 패킷 내부 (
OpenVPN양쪽 끝까지 도착했을 때)카카오 사설 대역을 받은 PC-카카오 사설 IP를 가진 카카오 오브젝트(카카오 클라우드)
- 정리하면 VPN 별로
사설 IP를 할당받는 것과 같음 - VPN 다운로드
- (다운로드 링크)[https://tunnelblick.net/downloads.html] 설치
stable
.ovpn파일(jaenyeong.dev@gmail.com.ovpn)을 사용해 연결.ovpn,ta.key파일을 같은 경로에 위치
- (다운로드 링크)[https://tunnelblick.net/downloads.html] 설치
- 카카오 사설망을 제외한 대역은 일반 네트워크로 전송
- 패킷 외부
- 라우팅 설정
- Public Subnet
$ sudo route add -net 172.30.0.0 -netmask 255.255.252.0 10.8.0.1
- Private Subnet
$ sudo route add -net 172.30.4.0 -netmask 255.255.252.0 10.8.0.1
- K8S API 서버 엔드포인트에 라우팅 룰 적용
$ sudo route add -net [API 서버 엔드포인트 주소] -netmask 255.255.255.255 10.8.0.1- API 엔드포인트가 K8S 엔진을 활용할 경우 필요 (따라서 생략)
- 라우팅 확인
$ netstat -nr | grep 10.8.
- 맥은 윈도우와 다르게 재부팅할 때마다 반복 입력해야 함
kakao_vpn_route.sh파일 생성, 부팅할 때마다 실행 (settings경로에 보관)sudo route add -net 172.30.0.0 -netmask 255.255.252.0 10.8.0.1 sudo route add -net 172.30.4.0 -netmask 255.255.252.0 10.8.0.1 netstat -nr | grep 10.8.
- Public Subnet
접속 확인
$ ssh -i [pem 파일 경로] [계정]@[kakao i cloud Virtual Marchine Private IP]$ ssh -i kjn01.pem centos@172.30.5.108IP는kakao i접속, 확인 후 입력pem파일 권한이 없는 경우 (chmod 400 or 600)$ chmod 400 kjn01.pemor$ chmod 600 kjn01.pem
- 편리한
ssh접속을 위해/.ssh/config파일에 설정## Docker&KBS kakao i cloud (kjn-master-01) Host kakao_m_01 HostName 172.30.5.108 user centos IdentityFile /Users/kimjaenyeong/Documents/Lecture_Docker_K8S/settings/kjn01.pem ## Docker&KBS kakao i cloud (kjn-master-02) Host kakao_m_02 HostName 172.30.4.36 user centos IdentityFile /Users/kimjaenyeong/Documents/Lecture_Docker_K8S/settings/kjn01.pem ## Docker&KBS kakao i cloud (kjn-master-03) Host kakao_m_03 HostName 172.30.7.28 user centos IdentityFile /Users/kimjaenyeong/Documents/Lecture_Docker_K8S/settings/kjn01.pem ## Docker&KBS kakao i cloud (kjn-worker-01) Host kakao_w_01 HostName 172.30.6.245 user centos IdentityFile /Users/kimjaenyeong/Documents/Lecture_Docker_K8S/settings/kjn01.pem ## Docker&KBS kakao i cloud (kjn-worker-02) Host kakao_w_02 HostName 172.30.7.0 user centos IdentityFile /Users/kimjaenyeong/Documents/Lecture_Docker_K8S/settings/kjn01.pem
강사님의 Public key를 생성한 인스턴스(VM)에 세팅 (평가를 위해 필수)
- 가급적 모든 인스턴스에 추가할 것
kjn-master-01kjn-master-02kjn-master-03kjn-worker-01kjn-worker-02
$ sudo yum install -y wget- 또는
$ sudo apt-get install -y wget
- 또는
$ wget http://172.30.5.154/instructor.pub$ cat instructor.pub >> ~/.ssh/authorized_keys
K8S 설치 (kakao i cloud VM instance)
- 설치 전 접속
- 생성해둔 라우트 셸 스크립트 실행하여 추가
$ ./kakao_vpn_route.sh - 마스터 1번 노드
ssh접속$ ssh kakao_m_01
- 생성해둔 라우트 셸 스크립트 실행하여 추가
- HAProxy 설치 설정
- 마스터 1번 노드
- 명령 실행
# 0은 permissive 모드, 1은 enforce 모드 # permissive는 정책에 어긋나는 동작이어도 허용하며 로그를 남김 # enforce는 정책에 어긋나는 동작은 모두 차단 (SELinux) $ sudo setenforce 0 $ sudo yum install haproxy -y $ sudo vi /etc/haproxy/haproxy.cfghaproxy.cfg파일에 내용 추가 (shift + g버튼으로 맽 밑으로)# 위 명령 사이에 공백라인 확인할 것 frontend kubernetes-master-lb # 앞에 한칸 공백 확인할 것 bind 0.0.0.0:16443 option tcplog mode tcp default_backend kubernetes-master-nodes backend kubernetes-master-nodes # 앞에 한칸 공백 확인할 것 mode tcp balance roundrobin option tcp-check option tcplog # 생성한 마스터노드 Private IP 주소 server master1 172.30.5.108:6443 check server master2 172.30.4.36:6443 check server master3 172.30.7.28:6443 check- 수정 내용 반영
$ sudo systemctl daemon-reload && sudo systemctl restart haproxy
16443포트가Listen상태인지 확인$ netstat -nltpor$ sudo ss tnlp- 결과
(No info could be read for "-p": geteuid()=1000 but you should be root.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:16443 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN - tcp6 0 0 :::22 :::* LISTEN -
- 마스터 1번 노드
Kubeadm설치- Kubeadm 링크
- 배포 도구 중 하나로 클러스터 구축 도구
- 모든 노드
- 각 노드
ssh접속 >kakao_m_01,kakao_m_02,kakao_m_03,kakao_w_01,kakao_w_02 - 호스트명 확인
$ hostname
/etc/hosts파일 수정$ sudo vi /etc/hosts> 노드명, IP 등 입력
172.30.5.108 kjn-master-01.kr-central-1.c.internal kjn-master-01 172.30.4.36 kjn-master-02.kr-central-1.c.internal kjn-master-02 172.30.7.28 kjn-master-03.kr-central-1.c.internal kjn-master-03 172.30.6.245 kjn-worker-01.kr-central-1.c.internal kjn-worker-01 172.30.7.0 kjn-worker-02.kr-central-1.c.internal kjn-worker-02- 각 노드에서
ping으로 확인$ ping -c 1 kjn-master-01.kr-central-1.c.internal$ ping -c 1 kjn-master-02.kr-central-1.c.internal$ ping -c 1 kjn-master-03.kr-central-1.c.internal$ ping -c 1 kjn-worker-01.kr-central-1.c.internal$ ping -c 1 kjn-worker-02.kr-central-1.c.internal$ ping -c 1 kjn-master-01$ ping -c 1 kjn-master-02$ ping -c 1 kjn-master-03$ ping -c 1 kjn-worker-01$ ping -c 1 kjn-worker-02
iptables가 브리지된 트래픽을 보게 하기- 모든 노드에
br_netfilter모듈이 로드되었는지 확인$ lsmod | grep br_netfilter- 명시적으로 로드
$ sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf # 1 값이 활성화 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system- 모든 노드에
- 컨테이너 런타임(
Container Runtime Interface) 설치CRI- 도커 이외에도 다양한 컨테이너 런타임을 지원하기 위한 인터페이스- 장치 매퍼 저장소 드라이버(
device-mapper-persistent-data lvm2) 의존성 추가$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 도커 저장소 활성화 (추가) 및 확인
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo$ cat /etc/yum.repos.d/docker-ce.repo
docker-ce설치$ sudo yum install docker-ce -y
container runtime cgroup driver및kubelet cgroup driver설정 (수정)docker.service설정 열기$ sudo vi /usr/lib/systemd/system/docker.service- 기존
ExecStart옵션에--exec-opt native.cgroupdriver=systemd추가ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd containerd.sock뒤에 추가
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd containerd.sock --exec-opt native.cgroupdriver=systemd
- 위 설정 적용 (리로딩)
$ sudo systemctl daemon-reload
- 설정 적용 후 도커 재시작
$ sudo systemctl start docker && sudo systemctl enable docker- 도커 재시작 명령 및 서버가 재기동 후 도커 자동시작 설정
cgroup설정 확인$ sudo docker info | grep -i cgroupCgroup Driver: systemd Cgroup Version: 1
kubeadm,kubelet및kubectl설치 (필수 프로그램)- 개념
kubeadm- 클러스터를 부트스트랩하는 명령
kubelet- 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트
kubectl- 클러스터와 통신하기 위한 커맨드 라인 유틸리티
Redhat기반 배포판 설치centos는redhat과 거의 유사하기 때문에redhat설치
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOFPermissive모드로SELinux(Security-Enhanced Linux)설정 (효과적으로 비활성화)$ sudo setenforce 0$ sudo getenforce명령으로 현재 모드 확인 가능Permissive모드가 아니라Enforcing과 같은 다른 모드인 경우 실행
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configSELinux- 보안 강화 리눅스로 시스템 액세스 권한을 효과적으로 제어하는 보안 아키텍처
- 현실적으로 사용하기 어려운 부분이 다소 있어 다른 보안 정책을 사용하는 경우가 흔함
- 따라서 리부팅 하더라도
SELinux를Enforcing에서Permissive로 적용되게 변경
- 따라서 리부팅 하더라도
- 직접 vi 에디터로 수정 가능
$ vi /etc/selinux/config
- 처음에
kubeadm,kubelet,kubectl를 한단계 낮은 버전으로 설치- 교육 과정 중 최신 버전 업그레이드 내용을 포함하기 때문에 나중에 최신 버전으로 버전 업 예정
- 기존 버전 확인
$ sudo yum info kubelet --disableexcludes=Kubernetes -y
kubeadm,kubelet,kubectl설치$ sudo yum install kubelet-1.21.0 --disableexcludes=kubernetes -y$ sudo yum install kubectl-1.21.0 --disableexcludes=kubernetes -y$ sudo yum install kubeadm-1.21.0 --disableexcludes=kubernetes -y
- 서버 리로딩 후에도
kubelet자동 실행 적용$ sudo systemctl enable --now kubelet
- 기존 버전 확인
- 최신 버전 설치하는 경우 (문서 내용)
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes- 한 번에 설치
$ sudo systemctl enable --now kubelet
- 교육 과정 중 최신 버전 업그레이드 내용을 포함하기 때문에 나중에 최신 버전으로 버전 업 예정
kubeadm.conf파일Environment옵션에 추가$ sudo vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf[Service] Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"- 추가 후
daemon reload,kubelet restart수행$ sudo systemctl daemon-reload$ sudo systemctl restart kubelet
- 개념
- 각 노드
kubeadm을 사용해 클러스터 생성- 링크
- 마스터 1번 노드만
Stacked control plane and etcd nodes설치$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint "$[MASTER1IP]:16443" --upload-certs$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint "172.30.5.108:16443" --upload-certsinit --pod-network-cidr=192.168.0.0/16는Calico� 활용 예정- 교육 과정 당시
centos에서 파드 간 통신하는 플러그인 중Calico(서드파티)만 검증되어 사용 kubeadm설치 시 자동으로 설치되지 않음 (별개의 서드파티 프로젝트)kubeadm설치 시 기본으로 설치되는 것CoreDNSDNS매핑 역할 (계속 변경되는 파드의IP매핑 관리)
- 교육 과정 당시
--control-plane-endpointHA prxoy가 설치된 마스터 1번 노드의 해당 포트--upload-certs는 인증서를 전달하여 손쉽게 구성
$ sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs- 완료 메시지
Your Kubernetes control-plane has initialized successfully! - 완료 후 별도 저장
$ vi finish.txt# 클러스터 사용을 위해 적용하라는 의미 To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join 172.30.5.108:16443 --token 96zifn.hav80stwul4myqaj \ --discovery-token-ca-cert-hash sha256:0cdba50fb8008c89e61925156a7158f11cd15baf295586184ac7d903deeb6054 \ --control-plane --certificate-key 27b77419ec104ce2679b1f55ac9d699a318d5c0fc1f1724781b1f7eeb3938835 Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join 172.30.5.108:16443 --token 96zifn.hav80stwul4myqaj \ --discovery-token-ca-cert-hash sha256:0cdba50fb8008c89e61925156a7158f11cd15baf295586184ac7d903deeb6054 .kube생성$ mkdir -p $HOME/.kube
- 어드민 설정 파일 복사
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- 복사한 컨피그(설정) 파일 권한 변경
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
root로 계정 전환 후 적용$ sudo su -$ cp /home/centos/.kube/config ~/.kube/config$ cd .kubeconfig는 인증 관련 내용,kubectl등을 사용할 수 있음
curl호출해calico.yaml파일 다운로드 및 이동, 확인$ curl https://docs.projectcalico.org/manifests/calico.yaml -O$ mv calico.yaml ~$ cat calico.yaml
kubectl확인$ kubectl get nodesor$ kubectl get nodes -o wide
- K8S에 필요한 것 중 없는 것들은
yaml파일로 생성하여 추가$ kubectl apply -f calico.yaml
- 마스터 2, 3번 노드
- 뒤에 명령으로 다른 마스터 노드(컨트롤 플레인) 루트 계정에서 설정할 수 있음을 의미
$ sudo su -명령으로 루트 전환 후 아래 명령 실행
You can now join any number of the control-plane node running the following command on each as root: # 아래 명령을 마스터 2, 3번 노드에서 루트 계정으로 전환 후 실행 kubeadm join 172.30.5.108:16443 --token 96zifn.hav80stwul4myqaj \ --discovery-token-ca-cert-hash sha256:0cdba50fb8008c89e61925156a7158f11cd15baf295586184ac7d903deeb6054 \ --control-plane --certificate-key 27b77419ec104ce2679b1f55ac9d699a318d5c0fc1f1724781b1f7eeb3938835 kubectl확인$ kubectl get nodesor$ kubectl get nodes -o wide
- 뒤에 명령으로 다른 마스터 노드(컨트롤 플레인) 루트 계정에서 설정할 수 있음을 의미
- 워커 1, 2번 노드
- 뒤에 명령으로 다른 워커 노드 루트 계정에서 설정할 수 있음을 의미
$ sudo su -명령으로 루트 전환 후 아래 명령 실행
Then you can join any number of worker nodes by running the following on each as root: # 아래 명령을 워커 1, 2번 노드에서 루트 계정으로 전환 후 실행 kubeadm join 172.30.5.108:16443 --token 96zifn.hav80stwul4myqaj \ --discovery-token-ca-cert-hash sha256:0cdba50fb8008c89e61925156a7158f11cd15baf295586184ac7d903deeb6054
- 뒤에 명령으로 다른 워커 노드 루트 계정에서 설정할 수 있음을 의미
- Kubeadm 링크
Kubectl
- K8S 클러스터를 제어하기 위한 CLI
$ kubectl[command][TYPE][NAME][flags]command- 명령을 하려는 동사 (create, get, describe, delete)
TYPE- 리소스 타입
NAME- 리소스명
flags- 선택적 옵션
$ kubectl help(--help)- 자주 사용되는
output flags-o wide-o yaml-o json--sort-by=<jsonpath_exp>--dry-run=client -o yaml > filename.yaml
- 예시
$ kubectl run test --image=nginx --dry-run=client -o yaml > 1.yaml$ kubectl apply -f 1.yaml$ kubectl get pod
인증서
Preflight-check완료 후kubeadm은 CA(자체 인증) 파일과 키를 생성- 키 위치 (
/etc/kubernetes/pki)
- 키 위치 (
$ ll /etc/kubernetes/pki명령으로 목록 확인.crt: 서버 인증서.key: 서버 개인키
자동 완성 설정
- 링크
Bash설정# bash-completion 패키지를 먼저 설치 sudo yum install -y bash-completion # bash의 자동 완성 셸에 설정 source /usr/share/bash-completion/bash_completion # 자동 완성을 bash 셸에 영구적으로 추가 echo "source <(kubectl completion bash)" >> ~/.bashrc # root권한으로 실행 kubectl completion bash >/etc/bash_completion.d/kubectlZsh설정# 현재 셸에 zsh의 자동 완성 설정 source <(kubectl completion zsh) # 자동 완성을 zsh 셸에 영구적으로 추가 echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc