CLOUD/Docker&Kubernetes

[Kubernetes/CentOS] 쿠버네티스 환경 구축하기

alsruds 2023. 4. 21. 18:32

♤ CentOS 8 가상머신 3대 준비 ♤

♠ Master 200.200.200.134

Node1 200.200.200.135

Node2 200.200.200.136

 

 

[ 3대 공통 ]

● 호스트 이름 설정

# vi /etc/hostname
	master 또는 node1 또는 node2

# vi /etc/hosts
	200.200.200.134 master
	200.200.200.135 node1
	200.200.200.136 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

 

도커 설치

# 설치
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

 

쿠버네티스 설치

# 방화벽
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

# 확인 - 위 내용이 들어있어야 함
sysctl --system

# 파일 설정
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

# swap 설정
swapoff -a

vi /etc/fstab
	/dev/mapper/cl-swap none swap defaults 0 0 수정
	#/dev/mapper/cl-swap none swap defaults 0 0 로 변경 ! (앞에 주석 달아주기)

 

 

[ Master ]

# container 네트워크 대역 설정
kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.11"
# kubeadm init --pod-network-cidr [container 네트워크 대역 설정] --control-plane-endpoint "[본체 컴퓨터 ip]"
# 본체 컴퓨터에서 6443 포트 포트포워딩 필요
# 마지막 두 줄 워커 노드들에 복사해주어야 함

# 홈 디렉토리 생성 + 관리 파일 - kubectl 사용 가능
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 확인
kubectl get nodes	# 마스터만 출력됨

# calico
#참고 : https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-50-nodes-or-less
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

vi calico.yaml	# 주석 해제
    - name: CALICO_IPV4POOL_CIDR
      value: "150.150.150.0/24"	# container ip 대역
      
kubectl apply -f calico.yaml	# 적용하기

 

 

[ Node1 / Node2 ]

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

# Master 노드에서 가져온 명령어 실행 결과 입력
# kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.11" 명령어 실행했을 때 마지막 두 줄 입력
kubeadm join 192.168.0.11:6443 --token ogtwdn.23oqr1bki6ag6qnq \
        --discovery-token-ca-cert-hash sha256:af1537dfd16dd6968c112894e3411a90163d644c57232d4b26703a37594fd476

 

확인하기 ( Master 에서 )

# 확인하기
kubectl get pod -n kube-system	
kubectl get nodes

# namespace 목록 확인 명령어
kubectl get all --all-namespaces

 

레디 레디 레디~

 

 

[ Dashboard 설정 ]

● Master

# recommended.yaml 다운받기
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

# 파일 설정
vi recommended.yaml
	type: NodePort	# 45번 라인 추가
    
# 적용하기
kubectl apply -f recommended.yaml

# 443:포트번호 확인
kubectl get services -n kubernetes-dashboard

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

》 3개의 노드 방화벽 꺼주기! > systemctl stop firewalld

 

● 접속하기

# 윈도우의 웹 브라우저로 접속
https://마스터노드IP:확인한포트번호

크롬에서 안전하지 않은 페이지 뜨면 브라우저 아무 곳에 thisisunsafe 입력

 

토큰 발급받기

# 파일 설정 1
cat <<EOF | kubectl create -f -
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: admin-user
   namespace: kube-system
EOF

# 파일 설정 2
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
   
# 토큰 확인
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

 

대시보드 접속 성공~