Kubernetes 가이드 문서
https://kubernetes.io/ko/docs/concepts/overview/components/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
인스턴스 기본 사양
- Master Node 최소 사양 - CPU 2 Core , RAM, 2G
- Workder Node 최소 사양 - CPU 1 Core, RAM 1G
1. 인스턴스 생성하기.
- 나는 CentOS 7 로 셋팅할 계획이다.
- Master Node는 CPU 2Core 로 생성!!!
- 3개의 인스턴스를 생성한다.
(Master, Workder 2개 )
- 생성을 완료 했으니. SSH 통신방법으로 서버에 접근을 해보자.
컬럼명이 "연결" 하단 SSH 옆 버튼을 누르면 "브라우저 창에서 열기" 가 있다. 선택.
CentOS7 에 Kubernetes 설치
각 인스턴스 Centos7 의 passwd 변경
sudo passwd
새비밀번호
새빌밀번호 검증
권한이 없다면 (https://dev-jj.tistory.com/5) 참고.
각 인스턴스 hostname 변경
hostnamectl set-hostname master-1
비밀번호 입력.
hostnamectl set-hostname work-1
hostnamectl set-hostname work-2
cat << EOF >> /etc/hosts
(마스터IP) master-1
(Work-1 IP) work-1
(Work-2 IP) work-2
EOF
위 IP는 환경에 맞게.
Docker(도커) 설치
참고 문서 https://docs.docker.com/install/linux/docker-ce/centos/
참고. (https://linoxide.com/linux-how-to/how-to-install-docker-on-centos/).
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-도커 버전 확인
yum list docker-ce --showduplicates | sort -r
-도커 설치. ( 버전은 꼭 쿠버네티스가 지원하는 버전으로 )
yum install docker-ce
위 명령어로 에러가 뜬다면. 아래 명령어를 입력.
( dnf -y install docker-ce --nobest)
OR
도커 버전 선택 설치.
yum install -y docker-ce-18.06.3.ce
도커 실행
systemctl enable --now docker
도커를 확인하고 싶다면 아래명령어.
systemctl status docker
도커가 설치 되고 상태를 확인하기 위해 명령어를 입력하게 되면 아래와 같이 나타난다.
Kubeadm 설치
CentOS SElinux 설정이 필요하다.
(enforce, permissive, disable 세 가지 모드가 있으며 RHEL/CentOS 를 설치하면 default 로 enforce mode 로 동작하며 SELinux 의 rule 에 어긋나는 operation 은 거부된다.)
현재 SELinux 동작 모드 확인 명령어
sestatus
Current Mode 를 permissive로 변경.
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
iptable 설정.
/bin/su -c "echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.d/k8s.conf"
/bin/su -c "echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.d/k8s.conf"
명령어 입력 후 위 반영사항 확인.
sysctl --system
Firewalld 비활성화.
sudo systemctl stop firewalld
sudo systemctl disable firewalld
OR
Master node
sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp
sudo firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --zone=public --add-port=10250/tcp
sudo firewall-cmd --permanent --zone=public --add-port=10251/tcp
sudo firewall-cmd --permanent --zone=public --add-port=10252/tcp
sudo firewall-cmd --reload
Work Node
sudo firewall-cmd --permanent --zone=public --add-port=10250/tcp
sudo firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
sudo firewall-cmd --reload
pod network add-on
sudo firewall-cmd --permanent --zone=public --add-port=179/tcp
sudo firewall-cmd --reload
reoo
Swap OFF
sudo swapoff -a
서버 재시작
sudo reboot
쿠버네티스 repo 설정
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
exclude=kube*
EOF
OR
vim /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
exclude=kube*
-----------------------------
kubeadm 설치
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
------------------------------
부팅 시 kubelet 자동시작 설정 // 실행
systemctl enable kubelet && systemctl start kubelet
kubeadm init Master Node
kubeadm init --apiserver-advertise-address=0.0.0.0
에러가 발생했다.. ㅠㅠ
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING FileExisting-tc]: tc not found in system path
ㅠㅠ.... 이렇게 3시간이라는 시간을 삽질을..
쿠버네티스에서 지원하는 Docker 버전이 일치하지 않았다, 또한 api ip에 말썽이 있었다.
그리고 kubeadm init --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=0.0.0.0 이 명령어를 사용안하고 내 IP를 이용했다.
만약.. 하다가 잘안된다면 몇가지 명령어를 찾게 될거다..
리셋...
kubeadm reset
중단
systemctl stop kubelet
https://codeday.me/ko/qa/20190720/1109597.html
설치완료 ㅠㅠ 하단 명령어 대로 디렉토리와 파일을 복사한다..
상태 조회.
kubectl get pods -n kube-system
kubectl get pods --all-namespaces
pod network add-on이 설치되어 있지 않은 상태에서는 CoreDNS가 아직 시작되지 않은 상태를 확인할 수 있다.
--상태
systemctl status kubelet
-- 로그
journalctl -xefu kubelet
Kubernetes 환경에서 Pod들이 통신하려면 pod network add-on이 있어야 합니다. pod network add-on이 설치되기 전에는 CoreDNS가 시작되지 않습니다. 'kubeadm init' 이후에 'kubectl get pods -n kube-system' 명령어로 확인해보면 CoreDNS가 아직 시작되지 않은 상태를 확인할 수 있습니다. (https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
만약 하다가 잘안된다면 쿠버네티스 공홈을 참고하자.
따라서 우리는 Calico 를 사용합시다.
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
모두 Running 중이다!!!
kubeadm Join
이제 Worker 노드들을 추가해보자.
Work 노드에 kubeadm 까지 설치 한다..
해당 명령어를 입력했을때. (Master 노드)
kubeadm init --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=0.0.0.0
하단에 아래 와 같은 조인 문법이 하나가 생성된다.
kubeadm join 10.146.0.10:6443 --token 9wmpej.uazb3oemhgee1mba \
--discovery-token-ca-cert-hash sha256:16aea0ce55363be1a609f4ca162d412c0a8c3eaca482e5ff02cea0d10e86824e
위 명령어를 Work 노드에 실행한다.
Work 노드를 Master 노드에 추가완료!
노드 조회
kubectl get nodes
클러스터 정보 조회
kubectl cluster-info
kubectl get pods --all-namespaces
자식 노드들 까지 클러스터를 이루게 되었다.
Kubernetes Dashboard 설치하자.
Dashboard 설치 방법 참고. https://github.com/kubernetes/dashboard
Kubernetes Dashboard 설치 방법에는 Recommended setup과 Alternative setup 등 두 가지가 있다.
Alternative setup 설치 방법은 HTTPS를 사용하지 않고 HTTP를 사용하여 Dashboard에 접속하는 방법으로 권장하지 않습니다.
HTTPS 셋팅을 위해선 SSL 셋팅이 필요.
1234
mkdir ~/certs
cd ~/certs
openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
openssl req -new -key dashboard.key -out dashboard.csr
openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kube-system
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
kubectl edit service kubernetes-dashboard -n kube-system
아래 부분 수정.
ports:
- nodePort: 31055
port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
Dashboard 접속정보 확인
kubectl get service -n kube-system
Dashboard 계정 생성
kubectl create serviceaccount cluster-admin-dashboard-sa
kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa
Dashboard 접속시 필요한 토큰 정보 확인 (복호화 https://jwt.io/)
kubectl get secret $(kubectl get serviceaccount cluster-admin-dashboard-sa -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6Imh6enJ4MERNbHVralQ1blgzTjFzVWZfOXcxazB4RzhGR2xwSFBNUFNDcDgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImNsdXN0ZXItYWRtaW4tZGFzaGJvYXJkLXNhLXRva2VuLXhqd3oyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNsdXN0ZXItYWRtaW4tZGFzaGJvYXJkLXNhIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNDA4NDJmZGYtYzQxMy00MmM2LWEwYjYtYmE1ZGVhZjRiNGVjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6Y2x1c3Rlci1hZG1pbi1kYXNoYm9hcmQtc2EifQ.MhjcFs22qvBHmAEKW2zOpgCT7vGqVnqMhwNDrJSmHEqVROqIkRLb9EPceupjgAeNoHIvk9t-PAi8oh9ZKV_CBrkLv_9Kwtw8B-FKtDz9ZodN-vLZr_LejT3dFJ1FOG0Ni73yfyAsigKgl82bBcZlC7mgQZowxXsUbprijEMBJmmFOqmUs8KdI5kk-YAQK9GGPAMuu9FtILTZTO_ZAphJXlamHQRXGp1AZ0mA1cwsrhied_V3jKAISo8sNAU-Z1X70Ow0QiqXJ2XcMumTwOSUZCPoHLrey2TWgdgGN41XUX3jZ1aU59k6k1bUwZT3Wqru3HRgVLL_dPADNp012Lnyjg[root@master certs
실행
kubectl proxy
localhost:포트번호 하면 실행된다...
근데 우리는 GCP라서 내부망이 아니잖아. 다시 셋팅을 해보자..
셋팅은 다음편에...
'Delvelopment > Self-MSA구축기' 카테고리의 다른 글
[Kafka Tool] KaDeck 이용해 Topic, Message생성하기. (0) | 2020.08.05 |
---|---|
API Gateway - Zuul 셋팅하기 IntelliJ, Gradle 사용. (0) | 2020.01.04 |
API Gateway - Eureka Client 셋팅하기-2 IntelliJ, Gradle 사용. (0) | 2020.01.04 |
API Gateway - Eureka Sever 셋팅하기-1 IntelliJ, Gradle 사용. (0) | 2020.01.04 |
GCP(Google Cloud Platform) 가입 및 무료크레딧으로 인스턴스 생성하기. (0) | 2019.12.08 |
댓글