쿠버네티스
Kubernetes(kubernetes)는 컨테이너화 된 애플리케이션(application)의 배포(deployment), 확장(scaling) 및 관리(management)를 자동화하는 Apache License 2.0이 적용되는 오픈소스(open source) 컨테이너(container) 오케스트레이션(orchestration) 플랫폼(platform)입니다.
쿠버네티스를 설치하려면 일단 container runtime이 필요하다. 도커를 설치하면 되기때문에 도커 설치는 이전 글을 참고하면 된다.
1. Swap memory 비활성화
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
2. Letting iptables see bridged traffic
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
3. 쿠버네티스 시스템이 서로 통신하기 위한 포트 열기
쿠버네티스는 마스터 노드와 워커 노드와의 통신 등 각종 통신을 위한 포트가 열려있어야 한다. 방화벽이 필요한 서버이면 해당 포트들을 열어주면 되고 필요하지 않다면 아예 꺼벼려도 된다.
마스터 노드
sudo ufw allow 6443/tcp
sudo ufw allow 2379/tcp
sudo ufw allow 2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10251/tcp
sudo ufw allow 10252/tcp
sudo ufw allow 10248
워커 노드
sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp
sudo ufw allow 10248
Weavenet 용 포트 열기
sudo ufw allow 6783/tcp
sudo ufw allow 6783/udp
sudo ufw allow 6784/udp
Weavenet 설치
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
4. kubeadm, kubelet, kubectl 설치
- kubeadm: 클러스터를 부트스트랩 하는 명령이다.
- kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다.
- kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다.
### 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 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
### kubelet 실행
systemctl start kubelet
systemctl enable kubelet
설치 후 쿠버네티스 클러스터를 운영하려면 kubeadm init 명령어를 사용한다. 꼭 마스터 노드에서 실행해야 한다.
kudeadm init --apiserver-advertise-address 172.31.0.100 --pod-network-cidr=192.168.0.0/16
--apiserver-advertise-address는 다른 노드가 마스터에게 접근할 수 있는 IP 주소이다. --pod-network-cidr 은 쿠버네티스에서 사용할 컨테이너의 네트워크 대역이다. 컨테이너 네트워크 애드온을 설치할 때 사용할 주소인데 기본 IP 대역은 192.168.0.0/16이다.
쿠버네티스의 컨테이너 간 통신을 위해 flannel, weavenet, calico 등이 있다. 아무거나 사용해도 무관한다.
kudeadm init 명령을 실행해 쿠버네티스 클러스터를 구성하면 몇 가지 명령어가 출력된다. regular user 즉 root 계정이 아닌 user 가 클러스터를 관리하려면 권한을 주는 명령어가 출력이 되는데 root 계정말고 다른 계정으로 관리하고 싶다면 실행해 줘야 한다. 후로는 워커 노드가 클러스터에 연결하기 위한 명령어가 토큰 값과 같이 출력이 된다. 워커 노드에서 쿠버네티스 클러스터에 join 하고 싶다면 실행시켜 주면 된다.
kubeadm init
### 설치가 끝나면 중요한 명령어가 몇개 출력된다
1. root 계정이 아닌 경우 아래 명령어 실행
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. 아래 명령어로 워커 노드에서 클러스터에 조인한다
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join [IP주소:포트] --token [토큰 값] \
--discovery-token-ca-cert-hash [디스커버리 토큰 해시 값]
Troubleshooting
[k8s] Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused. 발생 시.
redplug입니다. 테스트 환경은 Ubuntu 18.04.2 LTS 버젼 입니다. 쿠버네티스 설치 진행 시 kubeadm init, join 시 'http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.' 문..
blog.flgram.com
kubernetes coredns ContainerCreating
kubectl edit cm coredns -n kube-system loop 주석처리
rayis.tistory.com
'Kubernetes' 카테고리의 다른 글
쿠버네티스 포드 디자인 패턴 및 포드 설계 (0) | 2021.11.06 |
---|---|
쿠버네티스 잡(Job) 및 크론잡(CronJob) (0) | 2021.10.18 |
쿠버네티스 데몬셋 (0) | 2021.10.17 |
쿠버네티스 컨트롤러 (0) | 2021.10.17 |
쿠버네티스 포드 (0) | 2021.10.17 |