쿠버네티스란?
컨테이너를 쉽고 빠르게 배포/확장하고 자동화 하는 오픈소스 플랫폼 입니다.
도커 환경에서의 쿠버네티스 설치방법을 알아보자.
* 기본 준비
OS : CentOS7 3EA
IP : 192.168.111.1 - MASTER
IP : 192.168.111.2 - NODE1
IP : 192.168.111.3 - NODE2
1. 사전 준비
1) 각 서버의 /etc/hosts에 IP와 HOSTNAME을 추가
192.168.111.1 master
192.168.111.2 node1
192.168.111.3 node2
2) SELinux 설정을 permissive 모드로 변경
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
3) iptables 설정
# cat <<EOF>> /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF |
# reboot
# sysctl --system
4) firewalld 비활성화
# systemctl stop firewalld
# systemctl disable firewalld
5) swap off
# swapoff -a
# vi /etc/fstab
/etc/fstab 파일에 아래 코드 주석 처리:
#/dev/mapper/centos-swap swap swap defaults 0 0
2. Docker 설치
* master, node1, node2 모두 설치
# yum -y install yum-utils
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum -y install docker-ce docker-ce-cli containerd.io
# mkdir /etc/docker
# cat <<EOF>> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
|
# systemctl start docker && systemctl enable docker
3. kubernetes 설치
1) repolist 추가
# 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=0 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 |
2) kubeadm, kubectl, kubelet 설치
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# systemctl enable kubelet && systemctl start kubelet
* 특정버전을 설치하고자 할 경우
# yum install -y kubelet-1.19.7 kubeadm-1.19.7 kubectl-1.19.7 --disableexcludes=kubernetes
3) Master 에서 실행
kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-cert-extra-sans=<MasterIP> |
Your Kubernetes master has initialized successfully!
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
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713ce2af2d5d148
* 설치가 끝나면 Master 노드에서 아래 입력
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
* node1, node2 에서 아래 입력
kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713ce2af2d5d148
** 에러 발생시
[init] Using Kubernetes version: v1.22.3
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
위의 에러가 발생할 경우 echo '1' > /proc/sys/net/ipv4/ip_forward 입력 하고 재 실행
4) 환경변수 설정
# export KUBECONFIG=/etc/kubernetes/admin.conf
4. CNI 설치
1) CNI란?
컨테이너는 서로 다른 노드끼리 (master - node1 - node2) 통신을 할 수가 없다.
노드끼리 통신을 위한 네트워크 구성을 별도로 만들어야 하는데 쿠버네티스는 자체적으로 네트워크 구성을
해주지 않기 때문에 CNI(컨테이너 네트워크 인터페이스)플러그인을 설치해야한다.
2) 설치 방법
위의 kubernetes 과정이 문제가 없다면 아래의 명령을 사용
# curl https://docs.projectcalico.org/manifests/calico.yaml -O # vi calico.yaml apiVersion: policy/v1beta1 -> apiVersion: policy/v1 변경 - name: CALICO_IPV4POOL_CIDR value: "10.244.0.0/16" 변경 # kubectl apply -f calico.yaml |
위의 과정을 진행하게 되면 쿠버네티스 3대 구성 Master-Node1-Node2 는 완성 된다.
다음시간에는 Kubernetes dashboard와 LoadBalancer 타입을 지원하는 metallb를 진행하도록 하겠습니다.