2021-03-11 Docker & Kubernetes 배경지식 학습 및 환경 setting
3.11 을 기점으로 4월 중순까지 주1회 Kubernetes 실습을 진행한다.
이번 주차에는 간단히 Cgroup
과 Docker
에 대해 알아보고 Kubernetes 실습을 위한 환경을 구성해 본다.
process들의 자원 사용을 제한하고 격리시키는 Linux kernel의 기능이다.
Docker & Container는 이 위에서 동작하는 단일 Linux Kernel을 사용하는 제어 Host가,
다수의 분리된 Linux system 을 동작시키기 위한 가상화 기법이다.
Docker는 Linux 응용 program들을 container 안에 배치시키는 것을 자동화 하는 Container 관리 SW이다.
컨테이너의 배포, 관리, 확장, networking, 가용성을 자동화해주는 도구이다.
기능 :
ex) Kubernetes, Docker Swarm, Apache Mesos
다음 내용들은 회사의 vdi (CentOS7) 가상 머신 두 대를 이용하였음.
(한 대는 Master node, 다른 한 대는 Worker node 로 구성할 것임.)
(root 계정으로 접속을 가정.)
이 중 277번 Machine 이 Master node, 278번 Machine이 Worker node로 설정하였음
Docker 설치
yum update -y
yum install -y docker
systemctl enable docker && systemctl start docker
docker version
Kubernetes Yum Repository 구성
sudo bash -c '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'
통신 문제를 방지하기 위한 SE Linux 모드 변경
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=premissive/' /etc/selinux/config
Kubernetes 설치 & Kubelet 활성화
yum install -y kubeadm-1.15.5-0.x86_64 kubectl-1.15.5-0.x86_64 kubelet-1.15.5-0.x86_64 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
IPTables(방화벽 설정하는 도구) 설정 파일 작성
bash -c 'cat << EOF > /etc/sysctl.d/k8s.conf
>net.bridge.bridge-nf-call-ip6tables = 1
>net.bridge.bridge-nf-call-iptables = 1
>EOF'
IPTables 설정 파일 적용
sysctl --system
br_netfileter 모듈 load
lsmod | grep br_netfilter
Port 허용
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --reload
Kubernetes 초기화에 사용될 이미지 pull
kubeadm config images pull
Swap error처리
swapoff -a
, 또한 vi /etc/fstab
에서 swap 설정 주석처리 -> 영구적으로 끔.
Kubernets Cluster 설정(Master Only)
kubeadm init --pod-network-cidr=10.244.0.0/16
Kubernetes Cluster 접근 설정(Master Only)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Kube flannel 적용(Master Only)
wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
ip a # Network Interface 명 확인
vi Kube-flannel.yml # command에 --iface=network-interface명 추가.
CNI(Container Network Interface) 설치(Master Only)
curl https://docs.projectcalico.org/archive/v3.8/manifests/calico.yaml -O
kubectl apply -f calico.yaml
kubectl apply -f kube-flannel.yml
Kubernetes 주요 POD 동작 확인 & master node 연결 확인(Master Only)
kubectl get pod -n kube-system
kubectl get nodes
(calico 관련 오류 - 방화벽 문제이므로 systemctl stop firewalld
로 방화벽 아예 꺼보자.)
여기까지 성공하였다면, Master node 구성 완료.
이제 Master node 에 Worker node를 붙여 보자.
Master node에 추가(Worker Only)
kubeadm join [master-ip]:6443 --token [token] --discovery-token-ca-cert-hash sha256:[hash]
Token & Hash값 확인(Master node에서 확인)
kubeadm token list
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
Token list에 값이 없을 경우 Token 생성
kubeadm token create
결과 확인.
참고. Kubernetes master IP가 바뀌었을때
git clone https://github.com/dohyunKim12/kubernetes.git