2023. 9. 4. 20:20ㆍDevOps/Kubernetes
- 버전 정보
로컬 VM 기반 Kubernetes Cluster 구축
VMware 버전: 17
VM 버전: ubuntu 20.04
Kubernetes 버전: 1.20.0
- VM 3대 준비
Master 1
Node 1
Node 2
1. 서버 공통 설정
스왑 해제
swapoff -a; sed -i '/swap/d' /etc/fstab
Kubernetes 네트워킹에서 sysctl을 사용하여 IPv4 및 IPv6의 브릿지 트래픽을 iptables 체인으로 허용
Kubernetes 클러스터에서 네트워킹을 관리하기 위한 것으로, IPv4 및 IPv6 네트워크 트래픽을 처리하는 방법을 설정하는 것입니다. 네트워킹은 컨테이너와 노드 간의 통신을 관리하는 중요한 측면 중 하나입니다.
여기서 sysctl은 Linux 커널 파라미터를 설정하고 제어하는 도구입니다. 이 설정을 통해 IPv4 및 IPv6 네트워크 트래픽이 네트워크 브릿지를 통해 정상적으로 처리되도록 도와줍니다.
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
업데이트 & 기본 유틸 다운로드
apt-get update && apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
docker 설치
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update && apt install -y docker-ce containerd.io
signing key 추가 & K8S 레포지토리 추가
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
K8S 설치(1.20.0)
1.20.0 이후의 버전은 docker가 아닌 containerd로 구성해야 해서
익숙한 도커로 구성하기 위해 1.20.0버전으로 설치
apt update && apt install -y kubeadm=1.20.0-00 kubelet=1.20.0-00 kubectl=1.20.0-00
설치 확인
systemctl status kubelet
2. 마스터 서버 설정
쿠버네티스 클러스터 초기화
pod ip대역과 control-plane 노드(vm)의 ip를 설정
kubeadm init --control-plane-endpoint="10.0.1.77:6443" --upload-certs --apiserver-advertise-address=10.0.1.54 --pod-network-cidr=192.168.0.0/16
output 확인
Your Kubernetes control-plane has initialized successfully!
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
...
// ********************* 아래 명령어를 입력하여 노드를 추가할 수 있음 *********************
kubeadm join 10.0.1.77:6443 --token pdrhap.w5ynabi9aa24l9cc
--discovery-token-ca-cert-hash sha256:ccdede9a044092b93b720f05b4172da8b10070f0fa4a56445b0a27bdc0d5eaba
Admin 유저로 접속
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
CNI 설치
Pod간 통신을 위해서 CNI를 설치해주는데 / Calico를 설
kubectl create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
Master Node 상태 확인
kubectl get nodes
* Master 서버(control-plane)가 Ready 상태이면 정상.
3. Worker Node 서버 설정
클러스터에 Node 추가
2번 마스터 설정에서 클러스터 초기화 시에 나온 Node 추가 명령어를 입력
kubeadm join 10.0.1.77:6443 --token pdrhap.w5ynabi9aa24l9cc
--discovery-token-ca-cert-hash sha256:ccdede9a044092b93b720f05b4172da8b10070f0fa4a56445b0a27bdc0d5eaba
Node 상태 확인
kubectl get nodes
4. Dashboard 추가
[Master 서버 설정]
Dashboard Manifest Code 다운로드
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
Manifest Code 수정
Dashboard의 type을 NodePort로 변경하여 클러스터 외부에서 접속 가능하도록 변경
vi recommended.yaml
39 spec:
40 ports:
41 - port: 443
42 targetPort: 8443
43 selector:
44 k8s-app: kubernetes-dashboard
45 type: NodePort
Manifest Code 리소스 생성
kubectl apply -f recommended.yaml
Dashboard 포트 확인
kubectl get services -n kubernetes-dashboard
output 예시
방화벽 해제 후 접속
[Master IP]:[NodePort]로 접속시 보안 경고가 발생하지만,
사진 설명을 입력하세요.
해당 경고를 무시하고 고급 버튼을 눌러서 접속을 강제하거나
thisisunsafe <- 라고 입력하여 접속
Dashboard 접속 사용자 추가
새로운 Service Account를 생성하고
기존에 만들어진 Admin 권한이 있는 ClusterRole을 이어주는
ClusterRoleBinding을 생성해주는 아래 Manifest Code를 이용하여
계정 생성
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
토큰 확인
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
토큰 입력 후 Dashboard 접속
사진 설명을 입력하세요.
'DevOps > Kubernetes' 카테고리의 다른 글
Nginx Ingress인가 Ingress Nginx인가 (0) | 2023.10.30 |
---|---|
Rocky Linux RKE2 Intsall (1) | 2023.10.23 |
[Kubernetes] CSI(Container Storage Interface) (0) | 2023.09.13 |
[CKA] 2023 CKA(Certified Kubernetes Administrator) 합격 후기 (0) | 2023.09.05 |
EKS 클러스터에 HTTPS 통신 구성(Ingress, Cert-Manager) (0) | 2023.09.04 |