[쿠버네티스] 대시보드 설정

최동혁·2023년 4월 25일
0

쿠버네티스

목록 보기
1/7

쿠버네티스란?

  • 도커는 컨테이너를 규모에 맞게 늘려가도록 배치하는 기능이 부족
  • 컨테이너 애플리케이션을 배포하는 오케스트레이터를 구글이 개발
  • 구글은 내부 서비스를 클라우드와 컨테이너 환경으로 오래전부터 사용
  • 구글이 2014년 6월 오픈소스 프로젝트로 발표
  • 2015년 7월 버전 1.0을 기반으로 CNCF(Cloud Native Computing Foundation)을 설립
  • 레드햇, 이베이, AT&T, 시스코, IBM, 인텔, 트위터, VMware 등 다수 회사참여 개발

용어 정리

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html 참고

컨테이너

  • 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술

여러분이 PC에 프로그램을 설치할 때를 떠올려보세요. 특정 경로에 맞춰 설치를 해야 하거나, 내 컴퓨터에 필요한 옵션을 일일이 맞춰주느라 설치 과정에서 힘들었던 경험이 있을 텐데요. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와주는 기술입니다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있어요.

컨테이너 런타임

  • 컨테이너를 다루는 도구

컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구인데요. 종류도 여러 가지가 있어요. 그중 가장 유명한 것이 도커죠. 물론 도커가 사용하는 컨테이너 규격은 표준화되어 있기 때문에 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있습니다.

도커

  • 컨테이너를 다루는 도구 중 가장 유명한 것

쿠버네티스

  • 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구

쿠버네티스가 해 주는 일은 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등입니다. 이것을 컨테이너 오케스트레이션이라고 하죠.

오케스트레이션

  • 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

쿠버네티스 클러스터

  • 하나의 마스터와 최소 두 개 이상의 노드로 구성, 각각 별도의 시스템에서 구동, 필요할 때마다 노드를 추가해 용량을 늘려야 하는 실제 환경에서의 구성 방식

가상 머신 3대 준비

master_node 1대
worker_node 2대
각 cpu 2코어, 메모리 4GB 이상

host name 설정

  • 각 host로 들어가서 vi /etc/hostname 입력
  • localhost 지우고 각 역할에 맞게 고치기
  • 예를 들어 master는 master로, worker1은 node1, worker2는 node2

hosts 설정

  • vi /etc/hosts

192.168.133.133 master
192.168.133.134 node1
192.168.133.135 node2
  • 각 host의 ip와 이름을 위에처럼 적어주기(밑에 추가해주는것)

방화벽 설정

master, node1, node2 다 진행

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

setenforce 0
	
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
	
init 6
  • 각 port마다 방화벽을 열어주는 것.
  • selinux도 끄고 적용 후 재시작
  • 재시작하고 putty에 오른쪽 마우스를 누르고 restart하면 됨.

docker 설치

master, node1, node2 진행

yum install -y yum-utils 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum install -y docker-ce docker-ce-cli containerd.io --allowerasing


cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
 
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

k8s 설치

master, node1, node2 진행

firewall-cmd --add-masquerade --permanent
firewall-cmd --reload


cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
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
EOF


dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes

systemctl enable kubelet
systemctl start kubelet

k8s swap 설정

master, node1, node2 진행

swapoff -a

vi /etc/fstab
		/dev/mapper/cs-swap none swap defaults 0 0	이걸 다음처럼 변경, 주석 처리
		#/dev/mapper/cs-swap none swap defaults 0 0

master 설정

master만 진행

  • 로컬 컴퓨터에서 virtual network 접속

  • type이 NAT로 된걸 선택하고 가장 오른쪽 밑에 Change settings 클릭
  • 그리고 다시 NAT 선택하고 NAT settings 들어가기

  • 포트포워딩 추가를 눌러서 자신의 master ip를 적고 6443 포트포워딩
  • 다시 master shell로 와서
kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.100"		<- 윈도우 컴퓨터 IP

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
  • 위의 명령어 kubeadm init을 사용하면 kubeadm join ~~~ 어쩌하고 하는 토큰이 나옴. 일단 복사해놓기. worker에서 사용할것임.
  • kubectl get nodes 로 확인, 일단 마스터만 나옴
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

vi calico.yaml
	            # - name: CALICO_IPV4POOL_CIDR
	            #   value: "192.168.0.0/16"
				# 위에꺼 주석 풀고 밑에처럼 고치기
	            - name: CALICO_IPV4POOL_CIDR
	              value: "200.200.200.0/24"

kubectl apply -f calico.yaml
  • calico에 vi 편집기로 들어가서 :/CALICO 이런식으로 위의 주석 찾기
  • 주석 풀고, 위의 코드로 바꿔주기
  • 여기서 200.200.200.0/24는 파드가 배정받는 ip이다.

워커 설정

node1, node2 진행

firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp
	firewall-cmd --reload

# 아래 명령어는 마스터에서 복사했던 명령어, 필자꺼 그대로 복사하면 안됨
kubeadm join 192.168.100.10:6443 --token 2k7pts.1nqukldqk31y27dq \
        --discovery-token-ca-cert-hash sha256:657576c167484ce6df1b09bd84c9ec95a5752cce108fe82e2bbe43b63e8091e3
  • 위의 master 설정에서 토큰 복사해놨던걸 worker 2개에다가 그대로 복사 붙여넣기

master 노드에서 확인

kubectl get pod -n kube-system		
# 다 Running으로 잘 되는지 확인
kubectl get nodes				
# 다 Ready로 뜨는지 확인

  • 필자는 master의 이름을 실수로 안바꿔서 localhost.localdomain이라고 뜨는건데, master로 뜰거임 원래는.
  • 그리고 위의 사진에서 Running으로 나오는 것은 처음에는 바로 안나올 수 있음. 기다렸다가 Running으로 다 바뀔때까지 기다리기.

대시보드 설정

master에서 진행

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
vi recommended.yaml
		# 밑의 코드처럼 45번 라인 type: NodePort 추가
	     39 spec:
	     40   ports:
	     41     - port: 443
	     42       targetPort: 8443
	     43   selector:
	     44     k8s-app: kubernetes-dashboard
	     45   type: NodePort

		
kubectl apply -f recommended.yaml
	
kubectl get services -n kubernetes-dashboard
		# 443:포트번호
		# 포트번호를 확인


firewall-cmd --permanent --add-port=확인한포트번호/tcp
firewall-cmd --reload

  • 가장 오른쪽 아래에 443:32194로 나온걸 볼 수 있다.
  • 이게 우리가 대시보드로 접속하기 위해 사용할 port 번호임.
  • clusterip로는 원래 외부에서 접속이 불가함. 그걸 가능하게 해주는 것이 nodeport인데, 30000번대의 port를 랜덤으로 지정해줌.
  • 그렇기에 실 서비스 환경에서는 nodeport를 사용하지 않고 로드 밸런서를 사용함.

접속

  • master나 worker들의 ip에 위에서 발급받은 port를 이용해 접속해보기

  • 그냥 접속하면 이런 창이 나오는데, http가 default로 되어 있어서 https로 바꾸어서 도메인 창에 입력해야함.

  • 이런식으로 명시해줘야함.

  • 그러면 이런식으로 나옴.
  • 연결 누르기
  • 그러면 새로운 브라우저가 열리는데 닫는다.

  • 그러면 이런식으로 나옴.

  • 고급 버튼을 눌러 안전하지 않음으로 이동 클릭

  • 그러면 토큰을 이용해 로그인하라고 나옴.
cat <<EOF | kubectl create -f -
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: admin-user
   namespace: kube-system
EOF

cat <<EOF | kubectl create -f -
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   name: admin-user
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: cluster-admin
 subjects:
 - kind: ServiceAccount
   name: admin-user
   namespace: kube-system
EOF
  • 관리자 회원가입 설정하는 것임.
  • 이렇게 admin-user를 만듬.
  • kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
  • 위의 명령어를 치면 토큰을 부여받음.

  • 부여받은 토큰을 이용해 대시보드에 로그인 하면 위와 같은 창으로 이동함.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글