https://www.samsungsds.com/kr/insights/220222_kubernetes1.html 참고
여러분이 PC에 프로그램을 설치할 때를 떠올려보세요. 특정 경로에 맞춰 설치를 해야 하거나, 내 컴퓨터에 필요한 옵션을 일일이 맞춰주느라 설치 과정에서 힘들었던 경험이 있을 텐데요. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와주는 기술입니다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있어요.
컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구인데요. 종류도 여러 가지가 있어요. 그중 가장 유명한 것이 도커죠. 물론 도커가 사용하는 컨테이너 규격은 표준화되어 있기 때문에 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있습니다.
쿠버네티스가 해 주는 일은 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등입니다. 이것을 컨테이너 오케스트레이션이라고 하죠.
master_node 1대
worker_node 2대
각 cpu 2코어, 메모리 4GB 이상
192.168.133.133 master
192.168.133.134 node1
192.168.133.135 node2
master, node1, node2 다 진행
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
init 6
master, node1, node2 진행
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
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
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
master, node1, node2 진행
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
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
EOF
dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes
systemctl enable kubelet
systemctl start kubelet
master, node1, node2 진행
swapoff -a
vi /etc/fstab
/dev/mapper/cs-swap none swap defaults 0 0 이걸 다음처럼 변경, 주석 처리
#/dev/mapper/cs-swap none swap defaults 0 0
master만 진행
kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.100" <- 윈도우 컴퓨터 IP
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O
vi calico.yaml
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
# 위에꺼 주석 풀고 밑에처럼 고치기
- name: CALICO_IPV4POOL_CIDR
value: "200.200.200.0/24"
kubectl apply -f calico.yaml
node1, node2 진행
firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp
firewall-cmd --reload
# 아래 명령어는 마스터에서 복사했던 명령어, 필자꺼 그대로 복사하면 안됨
kubeadm join 192.168.100.10:6443 --token 2k7pts.1nqukldqk31y27dq \
--discovery-token-ca-cert-hash sha256:657576c167484ce6df1b09bd84c9ec95a5752cce108fe82e2bbe43b63e8091e3
kubectl get pod -n kube-system
# 다 Running으로 잘 되는지 확인
kubectl get nodes
# 다 Ready로 뜨는지 확인
master에서 진행
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
vi recommended.yaml
# 밑의 코드처럼 45번 라인 type: NodePort 추가
39 spec:
40 ports:
41 - port: 443
42 targetPort: 8443
43 selector:
44 k8s-app: kubernetes-dashboard
45 type: NodePort
kubectl apply -f recommended.yaml
kubectl get services -n kubernetes-dashboard
# 443:포트번호
# 포트번호를 확인
firewall-cmd --permanent --add-port=확인한포트번호/tcp
firewall-cmd --reload
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF