References




  • 구성
    • On-Premise 환경 ( Xcp-ng (XEN) ) 환경에서 ( CentOS 7 ) 구성
    • Master Node 1대, Worker Node 2대, Private Repository 1대로 구성



  • Hostname 설정

$ hostnamectl set-hostname k8s-master (마스터 노드 VM 에서)
$ hostnamectl set-hostname k8s-worker1 (워커 노드 VM 에서)
$ hostnamectl set-hostname k8s-worker2 (워커 노드 VM 에서)


  • /etc/hosts 파일 수정

$ cat << EOF >> /etc/hosts
"마스터 노드 IP" k8s-master
"워커 노드1 IP" k8s-worker1
"워커 노드2 IP" k8s-worker2
EOF


  • 메모리 Swap 끄기
    • Kubernetes 는 메모리 Swap을 사용하지 않기 때문에 종료

$ swapoff -a
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab


  • Selinux Mode 변경 ( Permmisive )

$ setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


  • Iptables 설정 & IP v6 disable 설정

$ modprobe br_netfilter
$ cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

$ cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ vi /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.bindv6only = 0

$ sysctl --system

  • Firewall 설정 (데모 환경이므로 disable 또는 사용 포트 open)

$ systemctl disable --now firewalld

## or firewall enable 시 사용 할 port 허용


### Control-plane node(s) (Master Node)

# for Kubernetes API server
firewall-cmd --permanent --add-port=6443/tcp

# for etcd server client API
firewall-cmd --permanent --add-port=2379-2380/tcp

# for Kubelet API
firewall-cmd --permanent --add-port=10250/tcp

# for kube-scheduler
firewall-cmd --permanent --add-port=10251/tcp

# for kube-controller-manager
firewall-cmd --permanent --add-port=10252/tcp

# for dns
firewall-cmd --permanent --add-port=53/tcp

# firewalld reload
firewall-cmd –-reload



### Worker node(s)

# for Kubelet API
firewall-cmd --permanent --add-port=10251/tcp

# for NodePort Services
firewall-cmd --permanent --add-port=30000-32767/tcp

# for dns
firewall-cmd --permanent --add-port=53/tcp (this is for dns)

# firewalld reload
firewall-cmd –-reload


  • Docker 설치

$ yum install -y yum-utils device-mapper-persistent-data lvm2

$ yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

$ yum update -y && yum install -y docker-ce docker-ce-cli containerd.io


  • k3 설치 (Kubelet, Kubeadm, Kubectl)
    • 내려받을 저장소 설정 (gpgcheck = 0 & repo_gpgcheck = 0 주의)

$ 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=0
repo_gpgcheck=0
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

    • k3 설치 & kubelet 실행

$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
$ systemctl enable --now kubelet





  • kubeadm init
    • 마스터 노드에서 작업
    • 쿠버네티스가 컨테이너에 부여하는 네트워크를 설정해 클러스터 초기화
    • Calico CNI 를 사용할 pod-network 설정, k8s node 들과 네트웍이 겹치므로 172.16.0.0/12 Private 네트워크로 설정

$ kubeadm init --pod-network-cidr=172.16.0.0/12 --apiserver-advertise-address="마스터 노드 IP"


  • 마스터 노드에서 쿠버네티스를 정상적으로 구동할 수 있도록 설정파일 복사, 권한 부여

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config


  • kubeadm init > 성공 시 나온 명령어를 Worker node에 입력
    • 워커노드에서 작업

(예시)
$ kubeadm join 192.168.1.176:6443 --token b41qqy.p1gxozcbcu1k1uf1 \ --discovery-token-ca-cert-hash sha256:911ca9c475a72a93150b14557abad91217e9e05e97443a47180d5e90b0ef0649







  • Kubernetes CNI(Calico) 설치

$ curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -o calico.yaml
$ sed -i -e "s?192.168.0.0/16?172.16.0.0/12?g" ./calico.yaml
$ kubectl apply -f calico.yaml
$ kubectl get pods --all-namespaces --watch


  • Kubernetes Dashboard 설치 (2021 10 14 기준)

$ kubectl apply -f https://kubetm.github.io/documents/appendix/kubetm-dashboard-v1.10.1.yaml


  • Proxy 서버 기동

$ nohup kubectl proxy --port=8001 --address="본인 ip" --accept-hosts='^*$' >/dev/null 2>&1 &

    • http://"본인 ip":8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 로 접속




++ Docker Compose 설치

$ curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

$ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose




++ Portainer 설치 및 구동 ( docker volume(가상 파일 시스템) 을 사용하여 설치 및 구동 )

$ docker volume create portainer_data

$ docker run -d -p 9000:9000 \
--restart=always \
--name=portainer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer
  • https://{ip}:9000 으로 접속



Download PDF

Download PDF