Prerequisite
-
Kubernetes 클러스터가 있어야 함 (Kubernetes 클러스터 구성하기 (with. GCP, Ansible, kubeadm) 참고)
-
관리 Console 서버는 Kubernetes 노드이 속해 있는 네트워크와 같은 네트워크를 사용하는 것을 권장
-
다른 네트워크를 사용해야만 하는 경우 네트워크 간 Peering 되어 있거나 Site to Site VPN 또는 Proxy 등으로 접근이 가능해야만 함
-
Ndoe 들의 Public IP 말고 Private IP 에 접근 가능해야 함
-
GCP 사용 시 별도의 설정이 없었다면 asia-northeast3 의 default VPC 서브넷(10.178.0.0/20) 을 사용하게 됨
-
gcloud 초기화
gcloud init
-
환경변수
PROJECT=$(gcloud config get-value project) ACCOUNT=$(gcloud config get-value account) ZONE=$(gcloud config get-value compute/zone) echo $PROJECT echo $ACCOUNT echo $ZONE
Compute Engine VM Instance
gcloud compute instances create console \
--zone=$ZONE \
--custom-cpu=1 \
--custom-memory=2 \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--boot-disk-size=50GB
# gcloud compute instances delete console
SSH 접속
-
SSH 접속
gcloud compute config-ssh --ssh-key-file=~/.ssh/gcp_rsa ssh console.$ZONE.$PROJECT ssh master.$ZONE.$PROJECT
GCP Compute Engine 에 SSH Key 등록이 안되어 있다면 Kubernetes 클러스터 구성하기 (with. GCP, Ansible, kubeadm) 글 참고 부탁 드립니다~
[Master 서버] Password 방식으로 SSH 접속 가능하게 설정
sudo su
PASSWD=wooyoung1!
echo "wooyoung:$PASSWD" | chpasswd
PASSWD=root1!
echo "root:$PASSWD" | chpasswd
sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
systemctl restart sshd
[console 서버] Master 서버에 사용자 SSH Key 등록
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id root@master
[console 서버] Host 설정
sudo sh -c 'echo "10.178.0.50 master" >> /etc/hosts'
sudo sh -c 'echo "10.178.0.52 worker1" >> /etc/hosts'
sudo sh -c 'echo "10.178.0.51 worker2" >> /etc/hosts'
cat /etc/hosts
Kubernetes Node 들의 Private IP는
gcloud compute instances describe master --format='get(networkInterfaces[0].networkIP)'
로 확인 가능
[console 서버] kubectl Install
# apt 패키지 색인 업데이트, 쿠버네티스 apt 리포지터리 관련 패키지 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 구글 클라우드 공개 사이닝 키 다운로드
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# 쿠버네티스 apt 리포지터리 추가
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 새 리포지터리의 apt 패키지 색인 업데이트
sudo apt-get update
# kubectl 설치
sudo apt-get install -y kubectl
[console 서버] Master 서버의 Kubernetes 인증서 복사
mkdir .kube && cd .kube
scp root@master:/etc/kubernetes/admin.conf ~/.kube/config
kubectl 명령어 실행
-
Node 확인
kubectl get nodes
-
Service Routing
kubectl run nginx --image=nginx --port=80 && kubectl expose pod nginx # busybox pod는 바로 삭제됨 kubectl run busybox -i --tty --image=busybox --restart=Never --rm $> wget nginx.default.svc.cluster.local $> cat index.html $> exit kubectl delete pods nginx
-
Pod to Pod ping Test
kubectl create deployment pingtest --image=busybox --replicas=3 -- sleep infinity kubectl get pods --selector=app=pingtest --output=wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pingtest-59c784bfb4-n25tl 1/1 Running 0 8s 192.168.189.68 worker2 <none> <none> pingtest-59c784bfb4-rvtn5 1/1 Running 0 8s 192.168.235.131 worker1 <none> <none> pingtest-59c784bfb4-s9296 1/1 Running 0 8s 192.168.235.132 worker1 <none> <none> kubectl exec -ti pingtest-59c784bfb4-n25tl -- sh $> ping 192.168.235.131 -c 4 $> exit kubectl delete deployments.apps pingtest