마짱짱의 지식창고
Ubuntu 18.04 Kubeadm & Calico 구성하기 본문
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
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
'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 |