728x90
반응형
설치 환경 구성
HOST | IP Address | arch | CPU | Memory | OS |
master.example.com | 10.100.0.104 | X86_64 | 2core | 4GiB | Ubuntu 20.04.3 LTS |
node1.example.com | 10.100.0.101 | X86_64 | 2core | 4GiB | Ubuntu 20.04.3 LTS |
node2.example.com | 10.100.0.102 | X86_64 | 2core | 4GiB | Ubuntu 20.04.3 LTS |
1. Docker 설치하기
링크 : https://docs.docker.com/engine/install/ubuntu/
저장소 설정
- 설치 가능한 패키지 리스트 업데이트
root@master:~# apt-get update ... 내려받기 5,956 k바이트, 소요시간 22초 (276 k바이트/초) 패키지 목록을 읽는 중입니다... 완료
- 필요 패키지 curl, gnupg, lsb-release 설치하기
guru@master:~$ sudo apt-get install -y \ > ca-certificates \ > curl \ > gnupg \ > lsb-release 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done.
- Docker의 공식 GPG 키 추가
guru@master:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Docker Repository 설정
guru@master:~$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ > $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker Engine 설치
- 최신 버전 의 Docker Engine 및 containerd 설치하기
guru@master:~$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료
- Docker cgroup systemd 로 맞추어주기
설정이유 : docker 의 기본 cgroup-driver 는 cgroupfs 이고, kubelet 의 기본 cgroup-driver 는 systemd 라서 두 개의 다른 cgroup 관리자가 존재하게 되어, Initial timeout of 40s passed. 같은 오류가 발생하게 된다.guru@master:~$ cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"] } EOF guru@master:~$ systemctl restart docker
- Docker 설치 확인하기
guru@master:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2. kubernetes 설치하기
링크 : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
설치 전 환경설정
- Swap Off 시키기
guru@master:~$ free -h total used free shared buff/cache available Mem: 3.8Gi 238Mi 3.0Gi 1.0Mi 603Mi 3.4Gi 스왑: 1.5Gi 0B 1.5Gi guru@master:~$ sudo swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab root@master:~# free -h total used free shared buff/cache available Mem: 3.8Gi 227Mi 3.0Gi 1.0Mi 604Mi 3.4Gi 스왑: 0B 0B 0B
- iptables가 브릿지 설정된 트래픽을 보도록 허용 (Letting iptables see bridged traffic)
root@master:~# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf > br_netfilter > EOF br_netfilter root@master:~# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF root@master:~# sudo sysctl --system
- 방화벽 비활성화 시키기 (firewall off)
root@master:~# ufw disable 방화벽이 비활성 되었으며 시스템이 시작할 때 사용되지 않습니다
kubeadm, kubelet and kubectl 설치
- 필요 패키지 apt-transport-https ca-certificates curl 설치하기
root@master:~# apt-get update ... 내려받기 5,956 k바이트, 소요시간 22초 (276 k바이트/초) 패키지 목록을 읽는 중입니다... 완료 root@master:~# apt-get install -y apt-transport-https ca-certificates curl 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 ... kubeadm (1.22.3-00) 설정하는 중입니다 ... Processing triggers for man-db (2.9.1-1) ...
- Google Cloud 공개 서명 키를 다운로드 (Download the Google Cloud public signing key)
root@master:~# sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
- Kubernetes Repository 추가하기
root@master:~# echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
- apt패키지 인덱스를 업데이트 하고 kubelet, kubeadm 및 kubectl을 설치
root@master:~# apt-get update ... 내려받기 60.3 k바이트, 소요시간 2초 (39.7 k바이트/초) 패키지 목록을 읽는 중입니다... 완료 root@master:~# apt-get install -y kubelet kubeadm kubectl 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 다음의 추가 패키지가 설치될 것입니다 : ... kubeadm (1.22.3-00) 설정하는 중입니다 ... Processing triggers for man-db (2.9.1-1) ...
- kubelet kubeadm kubectl 패키지 버전 홀드하기
root@master:~# apt-mark hold kubelet kubeadm kubectl kubelet 패키지 고정으로 설정. kubeadm 패키지 고정으로 설정. kubectl 패키지 고정으로 설정.
- bash shell (TAB 키 이용해서 사용) - 링크: https://kubernetes.io/docs/reference/kubectl/cheatsheet/
source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
클러스터 구성
- 마스터 노드에서 초기화 실행
root@master:~# kubeadm init root@master:~# mkdir -p $HOME/.kube root@master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config root@master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config # 해당 토큰 결과 저장해두기 root@master:~# cat > token.tx kubeadm join 10.100.0.104:6443 --token kmi1b1.a623... \ --discovery-token-ca-cert-hash sha256:ac5... <Ctrl>+<d>
- 마스터 노드에서 weave넷 설치
root@master:~# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.apps/weave-net created
- 각 워커 노드에서 master 노드 join 실행
root@node1:~# kubeadm join 10.100.0.104:6443 --token kmi1b1.a623... --discovery-token-ca-cert-hash sha256:ac5... [preflight] Running pre-flight checks [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
- 마스터 노드에서 잘 연결되었는지 노드 확인하기
root@master:~# kubectl get nodes NAME STATUS ROLES AGE VERSION master.example.com Ready control-plane,master 2d16h v1.22.3 node1.example.com Ready <none> 2d16h v1.22.3 node2.example.com Ready <none> 2d16h v1.22.3 root@master:~# su guru
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes - pod resource 요청 및 제한 (0) | 2021.11.18 |
---|---|
Kubernetes - static Pod (정적 파드) (0) | 2021.11.18 |
Kubernetes - namespace (네임스페이스) (0) | 2021.11.15 |
Kubernetes - kubectl 명령어 실습 (0) | 2021.11.14 |
kubernetes 아키텍쳐 (0) | 2021.10.21 |