쿠버네티스 환경구축

TaeYoon Kim·2024년 3월 24일
0

기초 (치트 시트)

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

    (2) 쿠버네티스 설치
    1) 설치 환경
    [1] 개발 용도의 쿠버네티스
    Minikube
    Docker for Windows에 내장

    	* 로컬 환경에서 스탠드 얼론 방식으로 동작, 마스터와 노드가 동일한 호스트에 실행, 
    		기본 작동 방식을 이해 하기 유리하지만, 실제 환경에 적용하기 적절치 못함
    
    [2] 서비스 테스트 또는 운영 용도의 쿠버네티스
    	kuberspray (자체 서버)
    	kubeadm (자체 서버)
    	EKS,GEK (퍼블릭 클라우드 이용)
    
    	쿠버네티스 클러스터 : 하나의 마스터와 최소 두 개 이상의 노드로 구성, 각각 별도의 시스템에서 구동, 필요할 때마다 노드를 추가해 용량을 늘려야 
    			하는 실제 환경에서의 구성 방식

    (3) Centos 8에 설치 진행 (가상머신 3대 준비, CPU 2, MEM 4GB)
    1) 방화벽 설정
    [1] master
    [2] node1
    [3] 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
2) 호스트 이름 설정
  [1] master
  [2] node1
  [3] node2
vi /etc/hostname
	각 이름에 맞게 설정

vi /etc/hosts
	[master IP]	master
	[node1 IP]	node1
	[node2 IP]	node2





3) 도커 설치
  [1] master
  [2] node1
  [3] 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

4) k8s 설치
  [1] master
  [2] node1
  [3] node2

firewall-cmd --add-masquerade --permanent
firewall-cmd --permanent --add-port=30000-32767/tcp
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://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

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

systemctl enable kubelet
systemctl start kubelet

이때 status 확인하면 active 안뜨는 게 정상이다.

5) k8s swap 설정
  [1] master
  [2] node1
  [3] node2
swapoff -a

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

6) 마스터 설정
  [1] master											이거는 다른 네트워크 대역에서 추가할 때 사용 이거 추가하려면 6443 포트 포트포워딩
kubeadm init --pod-network-cidr [컨테이너의 네트워크 대역]/24 		--control-plane-endpoint "192.168.0.100"		<- 윈도우 컴퓨터 IP
											
ex) kubeadm init --pod-network-cidr 100.100.100.0/24 	


mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config


kubectl get nodes 로 확인, 일단 마스터만 나옴

아래의 에러가 나면
Unable to connect to the server: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

이걸 실행
unset KUBECONFIG
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):(id -g) $HOME/.kube/config

7) 워커 설정
  [2] node1
  [3] 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
위 명령어는 마스터에서 복사했던 명령어, 강사꺼 그대로 복사하면 안됨
위 명령어는 마스터에서 복사했던 명령어, 강사꺼 그대로 복사하면 안됨
위 명령어는 마스터에서 복사했던 명령어, 강사꺼 그대로 복사하면 안됨


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

9) 네트워크 CNI 설정 

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.27.0/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



10) 대시보드 설정
  [1] master
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
vi recommended.yaml
	45번 라인을 추가
     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



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

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

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 create token admin-user

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') 	명령어로 토큰 확인 후 웹브라우저에서 로그인


kubectl get pods -A

관리자 세션 타임아웃 설정
kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard

... content before...

spec:
  containers:
  - args:
    - --auto-generate-certificates
    - --namespace=kubernetes-dashboard
    - --token-ttl=0 # <-- add this with your timeout
  image: kubernetesui/dashboard:v2.0.0

... content after ...

post-custom-banner

0개의 댓글