- 2. 쿠버네티스 환경 구축2023년 04월 20일 20시 02분 59초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
쿠버네티스 환경 구축
쿠버네티스란?
도커는 컨테이너를 규모에 맞게 늘려가도록 배치하는 기능이 부족
컨테이너 애플리케이션을 배포하는 오케스트레이터를 구글이 개발
구글은 내부 서비스를 클라우드와 컨테이너 환경으로 오래전부터 사용
구글이 2014년 6월 오픈소스 프로젝트로 발표
2015년 7월 버전 1.0을 기반으로 CNCF(Cloud Native Computing Foundation)을 설립
레드햇, 이베이, AT&T, 시스코, IBM, 인텔, 트위터, VMware 등 다수 회사참여 개발
쿠버네티스 설치
설치 환경
개발 용도의 쿠버네티스
Minikube
Docker for Windows에 내장* 로컬 환경에서 스탠드 얼론 방식으로 동작, 마스터와 노드가 동일한 호스트에 실행,
기본 작동 방식을 이해 하기 유리하지만, 실제 환경에 적용하기 적절치 못함서비스 테스트 또는 운영 용도의 쿠버네티스
kuberspray (자체 서버)
kubeadm (자체 서버)
EKS, GEK (퍼블릭 클라우드 이용)쿠버네티스 클러스터 : 하나의 마스터와 최소 두 개 이상의 노드로 구성, 각각 별도의 시스템에서 구동, 필요할 때마다 노드를 추가해 용량을 늘려야 하는 실제 환경에서의 구성 방식
Centos 8에 설치 진행
Memory 4G, Core 2개 인 머신 3개 준비
방화벽 설정
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 # 브릿지 트래픽에 대한 IP 테이블 호출 활성화 echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables # SELinux를 비활성화 setenforce 0 # SELinux 설정 파일에서 SELinux를 비활성화하도록 변경 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux # 시스템 재부팅 init 6
호스트 이름 설정
master
node1
node2vi /etc/hostname 각 이름에 맞게 설정 vi /etc/hosts [master IP] master [node1 IP] node1 [node2 IP] node2
도커 설치
master
node1
node2# yum-utils 패키지 설치 yum install -y yum-utils # Docker 저장소 추가 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # Docker의 nightly 빌드를 사용할 수 있도록 저장소 활성화 yum-config-manager --enable docker-ce-nightly # Docker의 테스트 빌드를 사용할 수 있도록 저장소 활성화 yum-config-manager --enable docker-ce-test # Docker 및 관련 패키지 설치 (--allowerasing 옵션으로 충돌하는 패키지를 자동으로 삭제) yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
# 다음 내용을 /etc/docker/daemon.json 파일에 작성하고 저장 cat <<EOF | sudo tee /etc/docker/daemon.json { # cgroup 드라이버를 systemd로 설정 "exec-opts": ["native.cgroupdriver=systemd"], # 로그 드라이버를 json-file로 설정 "log-driver": "json-file", # 로그 옵션 설정: 최대 크기를 100메가바이트로 제한 "log-opts": { "max-size": "100m" }, # 스토리지 드라이버를 overlay2로 설정 "storage-driver": "overlay2" } EOF
# 시스템 데몬을 재로드하여 설정 변경사항을 적용 systemctl daemon-reload # Docker 서비스를 재시작하여 변경사항을 반영 systemctl restart docker # 시스템 부팅 시 Docker 서비스가 자동으로 시작되도록 설정 systemctl enable docker
k8s 설치master
node1
node2# 마스커레이딩(Masquerading)을 활성화하고 영구적으로 설정 firewall-cmd --add-masquerade --permanent # 방화벽 설정을 적용하기 위해 방화벽을 다시 로드 firewall-cmd --reload
# 쿠버네티스와 관련된 sysctl 설정을 /etc/sysctl.d/k8s.conf 파일에 저장 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
# 변경된 sysctl 설정을 시스템에 적용 sysctl --system
# Kubernetes 저장소를 /etc/yum.repos.d/ 디렉터리에 생성 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
# Kubernetes 관련 패키지(kubelet, kubeadm, kubectl) 설치 dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes # kubelet 서비스 활성화 및 시작 systemctl enable kubelet systemctl start kubelet
k8s swap 설정
master
node1
node2swapoff -a
# /etc/fstab 파일 열기 vi /etc/fstab # swap 파티션 비활성화를 위해 해당 줄을 주석 처리 # 원래 줄: /dev/mapper/cs-swap none swap defaults 0 0 # 변경 후: #/dev/mapper/cs-swap none swap defaults 0 0
마스터 설정
쿠버네티스 클러스터의 마스터 노드를 설정하고, 네트워크 구성과 관련된 몇 가지 작업을 수행하는 과정
master
# 쿠버네티스 클러스터 초기화 kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.191" <- 로컬 IP
# kubeconfig 파일 생성 및 설정 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
# calico.yaml 파일 수정 vi calico.yaml # 기존 값 주석 처리 # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # 새로운 값 설정 - name: CALICO_IPV4POOL_CIDR value: "200.200.200.0/24"
# calico 네트워크 구성 적용 kubectl apply -f calico.yaml # 오류가 있을 경우, calico 구성 삭제 kubectl delete -f calico.yaml
워커 설정
쿠버네티스 클러스터의 워커 노드들을 설정하고, 클러스터에 참여하기 위한 작업을 수행하는 과정
node1
node2# 워커 노드의 방화벽 설정 firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp firewall-cmd --reload
# 주의: 아래 명령어는 마스터 노드에서 실행한 'kubeadm init'의 출력을 참고하여 작성해야 함 kubeadm join 192.168.100.10:6443 --token 2k7pts.1nqukldqk31y27dq \ --discovery-token-ca-cert-hash sha256:657576c167484ce6df1b09bd84c9ec95a5752cce108fe82e2bbe43b63e8091e3 # * kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.100" # 마스터 노드에서 이 명령어를 실행한 후, 출력되는 내용을 워커 노드에 참고하여 입력해야 함
확인
모두 Running이고 Ready여야
# 마스터 노드에서, 모든 시스템 팟이 정상적으로 실행되고 있는지 확인 kubectl get pod -n kube-system # 마스터 노드에서, 모든 노드가 Ready 상태인지 확인 kubectl get nodes
대시보드 설정
쿠버네티스 대시보드를 설정하고, 대시보드에 접속할 수 있도록 방화벽을 구성하는 과정
master
# 대시보드 배포 파일 다운로드 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 대시보드 배포 파일 수정 vi recommended.yaml # 45번 라인에 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 # 확인한 포트 번호 기록
# 방화벽에 대시보드 포트 추가 firewall-cmd --permanent --add-port=확인한포트번호/tcp firewall-cmd --reload
웹 브라우저에서 대시보드 접속 https://마스터노드IP:확인한포트번호
# 클러스터 관리자 계정 생성 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}')
확인한 토큰으로 웹 브라우저에서 로그인
# 모든 네임스페이스의 팟 상태 확인 kubectl get pods -A
728x90반응형LIST'k8s' 카테고리의 다른 글
3. 쿠버네티스 다루기 (0) 2023.04.20 1. 쿠버네티스 (0) 2023.04.20 이전글이 없습니다.댓글