티스토리 뷰
minikube설치하기
1 node에 k8s cluster를 설치하는 가이드입니다.
1) VM 준비하기
VM은 cloud에서 구매하거나 PC에 Oracle Virtulbox를 이용해서 만들 수 있습니다.
아래는 IBM cloud에서 VM을 생성하는 방법입니다.
https://happycloud-lee.tistory.com/239
아래는 PC에 VM을 만드는 가이드입니다.
Centos나 중Ubuntu중 선택하여 구성 하십시오.
- Centos VM만들기: https://happycloud-lee.tistory.com/233
- Ubuntu VM 만들기: https://happycloud-lee.tistory.com/12
System requirements
Node | 대수 | OS | CPU | Memory | Storage |
VM | 1 | CentOS/Ubuntu | cloud: 2 core PC VM: 4core |
4G | 100GB |
2) OS upgrade
centos: sudo yum upgrade
ubuntu:
# apt-get update
# apt-get upgrade
3) docker 설치
https://happycloud-lee.tistory.com/14?category=830565
4) kubectl 설치
kubectl은 kubernetes의 API Server에 수행을 요청하는 프로그램입니다.
OS별 설치 가이드 최신본은 아래 링크를 참조하세요.
https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/
ubuntu
apt 패키지 색인을 업데이트하고 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지들을 설치 합니다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
구글 클라우드 공개 사이닝 키를 다운로드 합니다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
쿠버네티스 apt 리포지터리를 추가 합니다.
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 패키지 색인을 업데이트하고 kubectl을 설치 합니다.
sudo apt-get update
sudo apt-get install -y kubectl-1.23.3
centos, RHEL
$ 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
$ yum install -y kubectl-1.23.3
5) conntrack설치
docker 1.20이상부터는 아래 명령으로 conntrack이라는걸 설치해야 합니다.
ubuntu: sudo apt-get install -y conntrack
centos: sudo yum install -y conntrack
6) docker의 cgroup driver 변경
cgroup는 container의 리소스를 관리해 주는 기능입니다.
docker의 기본 cgroup driver는 'cgroupfs'이고, kubernetes의 kubelet은 'systemd'이기 때문에, 이를 맞춰주지 않으면 k8s가 불안정하게 동작할 수 있습니다.
자세한 내용은 아래 글을 참조하십시오.
https://tech.kakao.com/2020/06/29/cgroup-driver/
아래와 같이 daemon.json파일에 셋팅하고, docker를 재시작합니다.
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
docker 재시작
$ systemctl daemon-reload
$ systemctl restart docker
7) selinux mode변경: centos만 수행
centos에서는 SELinux(Secure Enhanced Linux)의 보안정책 위배 시 처리 방법을 변경해 줘야 합니다. 아래와 같이 enforcing, permissive, disabled가 있습니다.
아래와 같이 permissive mode로 변경합니다. 두번째 명령은 /etc/selinux/config파일을 sed명령으로 고치는 겁니다. 직접 그 파일을 열어 SELINUX의 값을 permissive로 변경해도 됩니다.
$ setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
8) iptables 사용 설정
쿠버네티스에서 네트워크 모드의 하나인 iptables를 사용하도록 설정 합니다.
[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
[root@master ~]# sysctl --system
9) SWAP 비활성화
쿠버네티스는 SWAP공간을 사용하지 않습니다. 아래와 같이 비활성화 하십시오.
[root@master ~]# swapoff -a
또한 리부팅 시에도 SWAP 비활성화가 되도록 /etc/fstab 파일도 수정 합니다.
fstab파일이 열리면 커서를 ' LABEL=SWAP-xvdb1'로 옮기고 'i'를 누른 후 '#'을 앞에 붙입니다. 그리고 'ESC'키를 누른 후 ':'을 입력하고 콜론 뒤에 'wq'를 눌러 저장하고 닫으면 됩니다.
[root@master ~]# vi /etc/fstab
UUID=2d00ecfc-6476-4e54-8066-19863783ee5a / ext4 defaults,noatime 0 0
UUID=0af0758b-9892-4acc-8037-a30111f1e4f0 /boot ext4 defaults,noatime 0 0
#LABEL=SWAP-xvdb1 swap swap defaults,nofail,x-systemd.device-timeout=500ms 0 0
[root@master ~]# mount -a
10) 네트워크 툴 설치
[root@master ~]# dnf install -y net-tools
11) minikube 설치
- minikube설치: 1.25.2 설치
minikube 최신 버전에서는 container runtime으로 docker를 사용 못하므로 이전 버전을 설치 합니다.
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.25.2/minikube-linux-amd64 && chmod +x minikube
- minikube 실행파일 만들기
$ install ./minikube /usr/bin
- minikube 시작
실행전에 docker daemon이 실행중인지 확인합니다.
# docker version
만약, docker daemon연결이 안되면 재시작 합니다.
# systemctl stop docker
# systemctl start docker
아래 명령중 IP주소를 본인 VM public IP로 변경하여 실행합니다.
$ ip a
$ minikube start --vm-driver=none \
--docker-env http_proxy=http://{VM IP}:8080\
--docker-env https_proxy=http://{VM IP}:8080\
--docker-env no_proxy=localhost,127.0.0.1,::1,{VM IP}
예시)
minikube start --vm-driver=none \
--docker-env http_proxy=http://165.192.77.184:8080 \
--docker-env https_proxy=http://165.192.77.184:8080 \
--docker-env no_proxy=localhost,127.0.0.1,::1,165.192.77.184
12) 설치 확인
아래와 같은 메시지가 나오면 성공적으로 시작된겁니다.
😄 Centos 8.5.2111 의 minikube v1.24.0
✨ 유저 환경 설정 정보에 기반하여 none 드라이버를 사용하는 중
👍 minikube 클러스터의 minikube 컨트롤 플레인 노드를 시작하는 중
🤹 Running on localhost (CPUs=2, Memory=3736MB, Disk=241546MB) ...
ℹ️ OS release is CentOS Linux 8
🐳 쿠버네티스 v1.22.3 을 Docker 20.10.11 런타임으로 설치하는 중
▪ env http_proxy=http://192.168.56.2:8080
▪ env https_proxy=http://192.168.56.2:8080
▪ env no_proxy=localhost,127.0.0.1,::1,192.168.56.2
> kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubelet: 718.80 KiB / 115.57 MiB [>_______________________] 0.61% ? p/s ?❗ This bare metal machine is having trouble accessing https://k8s.gcr.io
💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
> kubectl: 44.73 MiB / 44.73 MiB [---------------] 100.00% 3.17 MiB p/s 14s
> kubeadm: 43.71 MiB / 43.71 MiB [---------------] 100.00% 2.41 MiB p/s 18s
> kubelet: 115.57 MiB / 115.57 MiB [-------------] 100.00% 4.15 MiB p/s 28s
▪ 인증서 및 키를 생성하는 중 ...
▪ 컨트롤 플레인이 부팅...
▪ RBAC 규칙을 구성하는 중 ...
🤹 로컬 환경 변수를 구성하는 중 ...
{중략}
🔎 Kubernetes 구성 요소를 확인...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 애드온 활성화 : storage-provisioner, default-storageclass
🏄 끝났습니다! kubectl이 "minikube" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다.
아래 'kubectl get nodes'명령을 실행 했을때, 한 node에 kubernetes가 설치된것으로 나오면 성공입니다.
[root@osboxes ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
osboxes Ready control-plane,master 101s v1.22.3
13) Web dashboard 시작
Terminal이 아닌 web ui를 통해 k8s리소스를 조회하고 관리하려면 dashboard를 설치 하십시오.
k8s web console(=Web dashboard)을 아래와 같이 시작하십시오.
- dashboard 시작
$ minikube dashboard --url
주소가 나오면 CTRL-C를 눌러 prompt상태로 돌아 가십시오.
* --url은 브라우저를 바로 실행하지 말라는 옵션임
- 외부 접근을 위한 k8s service 'kubernetes-dashboard' 설정 변경
- Service type을 NodePort로 변경
'minikube dashboard'를 최초 실행할때 'kubernetes-dashboard' namespace에 dashboard를 위한 deployment, service, pod가 생성됩니다.
그런데, 아래와 같이 Service 'kubernetes-dashboard'가 외부에 노출된 포트가 없어 접근할 수가 없습니다.
$ kubectl get svc -n kubernetes-dashboard
Service 'kubernetes-dashboard'를 아래와 같이 바로 수정하여 외부에 port를 오픈합니다. 그리고 type을 ClusterIP에서 NodePort로 변경하고 저장합니다.
$ kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
아래와 같이 NodePort로 바꾸고 ESC키를 누른 후 'wq'를 입력하여 저장후 닫습니다.
- web브라우저에서 접근
외부에 노출된 service 'kubernetes-dashboard'의 포트를 확인합니다.
$ kubectl get svc -n kubernetes-dashboard
예를 들면 위와 같이 외부에 31397포트로 오픈이 된 것을 확인할 수 있습니다. 이 포트 번호는 다를 수 있습니다.
이제 Host PC에서 브라우저를 열고 http://{VM IP}:{Service PORT}로 접근하십시오.
ex) http://169.56.76.90:31397
아래와 같이 웹콘솔이 나오면 성공입니다.
14) ingress 활성화
minikube의 add on프로그램에서 ingress를 활성화 함
$ minikube addons list
$ minikube addons enable ingress
ingress-nginx 네임스페이스에 Pod가 정상적으로 실행되는지 확인
[root@kbbootcamp-docker test]# k get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-5n4pc 0/1 Completed 0 15m
ingress-nginx-admission-patch-2zbwx 0/1 Completed 0 15m
ingress-nginx-controller-cc8496874-9bllz 1/1 Running 0 15m
ingress가 정상 동작하는지 테스트 하려면 아래 글 참조하세요.
https://kubernetes.io/ko/docs/tasks/access-application-cluster/ingress-minikube/
15) Metric Server 활성화
리소스 사용량 모니터링을 위한 메트릭 서버를 활성화 합니다.
$ minikube addons list
$ minikube addons enable metrics-server
수 분 후에 아래 명령으로 메트릭 서버가 잘 동작하는지 확인합니다.
[root@kbbootcamp-docker ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kbbootcamp-docker.hee-soo-kim-s-account.cloud 505m 6% 2894Mi 18%
[root@kbbootcamp-docker ~]# kubectl top po -n kube-system
NAME CPU(cores) MEMORY(bytes)
coredns-64897985d-2tkkn 0m 20Mi
etcd-kbbootcamp-docker.hee-soo-kim-s-account.cloud 0m 48Mi
kube-apiserver-kbbootcamp-docker.hee-soo-kim-s-account.cloud 0m 246Mi
kube-controller-manager-kbbootcamp-docker.hee-soo-kim-s-account.cloud 0m 48Mi
kube-proxy-62hmf 0m 19Mi
kube-scheduler-kbbootcamp-docker.hee-soo-kim-s-account.cloud 0m 18Mi
metrics-server-6b76bd68b6-qcfzt 0m 18Mi
storage-provisioner 0m 14Mi
[root@kbbootcamp-docker ~]#
k8s 대시보드를 열어보면 리소스 사용량이 그래프로 나오는 걸 볼 수 있습니다.
16) 작업 편의를 위한 추가 작업들
- kubectl의 Alais만들기
$ alias k=kubectl
$ k get nodes
[root@kbbootcamp-docker test]# k get nodes
NAME STATUS ROLES AGE VERSION
bootcamp-... Ready control-plane,master 38m v1.23.3
'.bashrc'파일에 추가하여 다음 접근 시에도 alias가 유지되도록 합니다.
$ vi ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias k=kubectl
Alias를 만드는 다른 방법은 아래 글 참조
https://happycloud-lee.tistory.com/88
- kubens 설치 : namespace 이동을 편하게 해주는 유틸리티
https://happycloud-lee.tistory.com/95
참고) minikube 재시작
아래와 같이 중단 후 재시작하면 됩니다. 재시작할때는 기존 설정을 이용하기 때문에 start명령으로 시작하면 됩니다.
[root@osboxes ~]# minikube stop
✋ Stopping node "minikube" ...
🛑 1 node stopped.
[root@osboxes ~]# minikube start
주의) VM을 재시작했을때 자동으로 kubernetes 리소스가 올라오지 않습니다. 재시작 후에는 minikube start명령으로 다시 kubernetes리소스를 설치해야 합니다.
주의) nfs dynamic provisioning을 했고 minikube를 재시작 후 한 경우, kube-apiserver.yaml 변경이 필요 합니다.
nfs dynamic provisioning을 한 후 /etc/kubernetes/manifests/kube-apiserver.yaml에 아래 설정을 추가해야 합니다.
- --feature-gates=RemoveSelfLink=false
그런데, minikube를 재시작하면 kube-apiserver.yaml파일이 초기화됩니다.
minikube를 실행한 후 다시 kube-apiserver.yaml을 열어 위 설정을 추가하십시오.
참고) minikube 삭제
설치 중 실패하였거나, 더 이상 필요 없어 삭제하는 경우는 아래와 같은 순서로 완전 삭제할 수 있습니다.
$ minikube stop
$ minikube delete
$ rm -rf ~/.kube ~/.minikube
$ systemctl stop '*kubelet*.mount'
$ rm -rf /etc/kubernetes
$ docker system prune -af --volumes
$ rm -f /usr/bin/minikube
Multi-node에 k8s cluster 설치
여러개의 node에 vanilla k8s를 설치하는 가이드입니다.
https://happycloud-lee.tistory.com/35?category=832243
설치 후에는 아래 글을 참조하여 web dashboard도 구성하십시오.
https://happycloud-lee.tistory.com/36?category=832243
'Cloud > Kubernetes' 카테고리의 다른 글
4. K8s Resources > Pod 배포 Controller: Deployment, DaemonSet, Job, CronJob, StatefulSet (0) | 2019.09.12 |
---|---|
4. K8s Resources > 데이터 저장공간(Storage): Volume (0) | 2019.09.12 |
4. Kubernetes Resource 이해 > 개요 (0) | 2019.09.12 |
3. Getting Started (0) | 2019.09.12 |
1. What is Kubernetes ? (0) | 2019.09.12 |
- Total
- Today
- Yesterday
- AXON
- 리퀴드폴리탄
- 육각형인간
- CQRS
- Event Sourcing
- 디토소비
- 도파밍
- 호모프롬프트
- 마이크로서비스
- 스핀프로젝트
- 마이크로서비스 패턴
- 돌봄경제
- 애자일
- spotify
- 분초사회
- SAGA
- micro service
- agile
- API Composition
- 버라이어티가격
- 요즘남편 없던아빠
- 스포티파이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |