토스 영상에서 나왔듯 kubernets를 이용하여 관리하는 방식도 실습하기 위해서 vm에 구성하는 법을 알아보겠습니다.
VM k8s 구성하기
구성 스크립트
CentOs
#!/bin/bash
# 방화벽 끄기
systemctl stop firewalld
systemctl disable firewalld
# swap 시스템 메모리가 부족할 경우 하드 공간을 활용하여 작업을 도와주는 영역 --> off
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
# Docker 설치
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
systemctl enable docker --now
mkdir /etc/docker
cat <<EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# 브릿지 연결
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
systemctl enable --now docker && systemctl status docker
#kubeadm 설치
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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=kubelet kubeadm kubectl
EOF
# permissive 모드로 SELinux 설정(효과적으로 비활성화)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
yum install -y kubelet-1.21.4-0 kubeadm-1.21.4-0 kubectl-1.21.4-0 --disableexcludes=kubernetes
systemctl enable --now kubelet
# ip전달 값 변경
echo '1' > /proc/sys/net/ipv4/ip_forward
kubeadm init
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Ubuntu
#!/bin/bash
# 방화벽 끄기
ufw disable
# swap 시스템 메모리가 부족할 경우 하드 공간을 활용하여 작업을 도와주는 영역 --> off
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# Docker 설치
apt-get update
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
mkdir /etc/docker
cat <<EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# 브릿지 연결
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
systemctl enable --now docker && systemctl status docker
#kubeadm 설치
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee -a /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
# ip전달 값 변경
echo '1' > /proc/sys/net/ipv4/ip_forward
kubeadm init
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
마스터 구성
쿠버네티스 설정LINK
쿠버네티스는 인증서로 통신을한다.
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
kubectl를 사용할 사용자 홈에 집어 넣어줘야한다.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.0.0.6:6443 --token zwfaf2.dmzbq1dttqx8tckl \
--discovery-token-ca-cert-hash sha256:f80194adee67af701c319ec3fadb36e0e5335203a69a0bc4096ec441c77c6e6c
노드가 사용하기 위해서는 위 명령어를 입력해줘야한다.
워크 노드와 조인하기위해선는 위 토큰을 사용한다.
k8s가 서로 통신을하기위해서는 cni를 통하여 물리네트워크에다 물릴수있나?
cni 설치 링크 link
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created
네트워크 구성
구성 후
노드들에서아래 명령어를 실행해야합니다. 아래 명령어로 master 노드에 각 node들이 붙게끔합니다.
# 호스트에 접근할 수 있는 토근과 해쉬값 입력
kubeadm join 10.0.0.7:6443 --token 26as11.wjlpvygvgaxp24hf \
--discovery-token-ca-cert-hash sha256:5723d4f77e60c52cbbb20fb5bae07226240eb7b7842ef43735853d4d2d80d8d7