마짱짱의 지식창고

Ubuntu 18.04 Kubeadm & Calico 구성하기 본문

Kubernetes

Ubuntu 18.04 Kubeadm & Calico 구성하기

마짱짱 2021. 3. 12. 13:33
반응형

22-03-24 추가)

새로 작성한 버전이 있습니다 아래 링크에서 확인바랍니다

2022.03.23 - [Cloud/Kurbernetes] - [k8s] docker, kubeadm, Calico 설치

---------------------------------------------------------------------------------------

 

2021/02/22 - [Kurbernetes] - Ubuntu 18.04 Docker install (도커 설치하기)

이어서 작성된 글입니다.


0. 구성

Master 1대

172.16.0.100

 

Worker3대

172.16.0.101

172.16.0.102

172.16.0.103

* 코드에 따로 머신이름(Master, node) 없으면 모든 vm에 실행해야합니다.

1. Bridge 설정

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

해당 의미

  • CentOS 같은 리눅스 배포판은 net.bridge.bridge-no-call-iptables 값이 디폴트 0 (zero)다
  • 이는 bridge 네트워크를 통해 송수신되는 패킷이 iptables 설정을 우회한다는 의미다
  • 컨테이너의 네트워크 패킷이 호스트머신의 iptables 설정에 따라 제어되도록 하는 것이 바람직하며 이를 위해서는 이 값을 1로 설정해야 한다

출처:https://ingeec.tistory.com/99[없으면 없는대로]

2. 방화벽 포트설정

* 방화벽 설정 Documents

help.ubuntu.com/community/UFW

UFW을 활성화 할시 22/tcp(ssh) 가 끊기므로 22/tcp 등록해줘야 다른원격접속프로그램(ex)putty) 접속가능합니다.

 

MasterNode(1대)

Master
$ sudo ufw enable
$ sudo ufw allow 6443/tcp
$ sudo ufw allow 2379:2380/tcp
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 10251/tcp
$ sudo ufw allow 10252/tcp
$ sudo ufw status

WorkerNode(3대)

Node
$ sudo ufw enable
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 30000:32767/tcp
$ sudo ufw status

3. Kube Repositroy Registry & Install

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

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

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

* 추가설명

  • apt-transport-https: 패키지 관리자가 https를 통해 데이터 및 패키지에 접근할 수 있도록 한다.
  • ca-certificates: ca-certificate는 certificate authority에서 발행되는 디지털 서명. SSL 인증서의 PEM 파일이 포함되어 있어 SSL 기반 앱이 SSL 연결이 되어있는지 확인할 수 있다.
  • curl: 특정 웹사이트에서 데이터를 다운로드 받을 때 사용

출처 : roseline124.github.io/kuberdocker/2019/07/17/docker-study02.html

* Kubectl 자동완성

sudo -i
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl

4. kuberntes cluster init (쿠버네티스 클러스터 초기화)

1. 마스터 노드에 Local DNS 설정

Master
vi /etc/hosts

172.16.0.100 master
172.16.0.101 node1
172.16.0.102 node2
172.16.0.103 node3

2. 클러스터 초기화

Master
$sudo kubeadm init --apiserver-advertise-address 172.16.0.100 --pod-network-cidr=192.168.0.0/16

* --apiserver-advertise-address : 다른노드가 마스터노드로 접속 할수 있도록 한다. ( MasterNode IP 입력)

* --pod-network-cidr : 쿠버네티스에서 사용할 컨테이너 네트워크의 대역

* 오류사항

1. Docker의 group 문제

[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/ 

 

Docker의 그룹을 cgroupfs 에서 systemd 로 변경해주면 해결된다.

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

 

2. Docker version 맞춰주기 (Warning 이라 안해도 진행은 가능)

[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.5. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:

 

3. Swap 메모리 작동될시 나타는 에러문구         

[ERROR Swap]: running with swap on is not supported. Please disable swap

swapoff -a

부팅시에도 삭제하기위해
vi /etc/fstab 에서 /swap 줄 주석달아주기

 

4. 출력 결과로 나온 해당 아래 소스코드 3줄 마스터 노드에 입력

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

5. 또한 방금 출력결과로 나온 마지막줄 Token 주소를 각 노드에 입력

(이 부분은 작업하시는 분들마다 모두 다릅니다.)
sudo kubeadm join 172.16.0.100:6443 --token p75ojo.qd4kjf39yhop1bkq \
    --discovery-token-ca-cert-hash sha256:dedf7a0f7c01d954742f9dbf9ab2f54cf024d34311b0ec63c997e07e4384fc46

6. 마스터 노드에서 WorkerNode 확인

student@master:~$ kubectl get nodes

NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   2m22s   v1.20.4
node1    NotReady   <none>                 27s     v1.20.4
node2    NotReady   <none>                 7s      v1.20.4
node3    NotReady   <none>                 3s      v1.20.4

 

 

5. 컨테이너 네트워크 에드온 설치

쿠버네티스의 컨테이너 간 통신을위해 애드온을 설치해야한다.

(ex) calico, plannel, weaveNet ...)

 

작성자는 calico 기준으로 작성하였습니다.

* Calico 란?

Calico는 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션이다. 칼리코는 쿠베르네츠, 오픈시프트, 도커 EE, 오픈스택, 베어메탈 서비스 등 다양한 플랫폼을 지원한다.

 

1. Master에 Calico 설치

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

*오류 : calico node 0/1 runnung 현상

 * 원인

calico node 아무거나 내용확인
kubectl describe pods -n kube-system calico-node-9zdq6

calico/node is not ready: BIRD is not ready: BGP not established with 172.16.0.101,172.16.0.102,172.16.0.103 

라는 오류보고 BGP를 보고 calico docs를 확인하여 BGP 포트가 닫혀있는걸 확인

 

*BGP란?

경계 경로 프로토콜(BGP, Border Gateway Protocol)은 인터넷에서 주 경로 지정을 담당하는 프로토콜의 한 종류이다. 인터넷에서 자율 시스템(AS) 중 라우팅 및 도달 가능성 정보를 교환하기 위해 설계된, 표준화된 외부 게이트웨이 프로토콜의 하나이다.

출처 : ko.wikipedia.org/wiki/%EA%B2%BD%EA%B3%84_%EA%B2%BD%EB%A1%9C_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

출처 : docs.projectcalico.org/getting-started/kubernetes/requirements

 

* 해결

179/tcp 포트 열기
sudo ufw allow 179/tcp

node name 다른이유는 TEST를 했기 떄문입니다..

반응형

'Kubernetes' 카테고리의 다른 글

[k8s] docker, kubeadm, Calico 설치  (0) 2022.03.23
[K8s] drain, cordon, taint 비교  (0) 2021.03.25
Ubuntu 18.04 Docker install (도커 설치하기)  (0) 2021.02.22
[Kubernetes] WorkLoad - Pod  (0) 2020.07.22
Kubernetes? 쿠버네티스?  (0) 2020.07.21