sudo apt -y install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld
sudo ufw disable
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
https://kubernetes.io/docs/setup/
dpkg check
자신이 amd64인지 arm64 등 인지 확인 후 아래 설치에서 본인 컴퓨터에 맞는 버전을 설치
dpkg --print-architecture
Open Ports [Master]
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --add-port=6443/tcp --permanent
sudo firewall-cmd --add-port=2379-2380/tcp --permanent
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=10257/tcp --permanent
sudo firewall-cmd --add-port=10259/tcp --permanent
sudo firewall-cmd --add-port=179/tcp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
sudo firewall-cmd --add-port=5473/tcp --permanent
sudo firewall-cmd --add-port=2379/tcp --permanent
sudo firewall-cmd --reload
Open Ports [Worker]
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --add-port=6443/tcp --permanent
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=30000-32767/tcp --permanent
sudo firewall-cmd --add-port=179/tcp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
sudo firewall-cmd --add-port=5473/tcp --permanent
sudo firewall-cmd --add-port=2379/tcp --permanent
sudo firewall-cmd --reload
Swap off – Master, Worker
sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
sudo free -m #swap 메모리가 0인지 확인
Hostname Modify
/etc/hosts 디렉터리를 마스터 노드에 해당하는 IP와 DNS명을 입력하고 저장시켜준다.
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.0.1 k8s-master-node
192.168.0.2 k8s-master-node
192.168.0.3 k8s-master-2
192.168.0.4 k8s-master-3
Container Runtimes Install
우선 컨테이너 런타임을 설치한다.
아래 링크로 가서 최신 containerd 다운로드 주소를 복사한다.
https://github.com/containerd/containerd/releases
본 글에서는 containerd-1.7.2-linux-amd64.tar.gz 를 복사해 다운로드했다.
wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz
tar을 이용해 압축을 풀어준다
sudo tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz
Container Runtime Service Append
이제 서비스 등록을 하는 과정을 진행한다.
아래 서비스 코드를 작성하고 저장
sudo nano /etc/systemd/system/containerd.service
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
#uncomment to enable the experimental sbservice (sandboxed) version of containerd/cri integration
#Environment="ENABLE_CRI_SANDBOXES=sandboxed"
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
서비스 데몬 재시작 및 런타임 서비스 재시작
systemctl daemon-reload
systemctl enable --now containerd
Install runc
아래 페이지에서 최신 버전 runc 주소를 복사한다.
https://github.com/opencontainers/runc/releases
wget을 이용해 다운로드한다.
wget https://github.com/opencontainers/runc/releases/download/v1.1.8/runc.amd64
설치
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
CNI plugins Install
아래 링크에서 최신 주소를 복사한다.
https://github.com/containernetworking/plugins/releases
wget을 이용해 다운로드
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
디렉터리를 생성하고 압축을 풀어준다
sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz
아래 코드를 입력해 설정파일을 복제한다.
관리자 권한이 필요한 작업임으로 root 계정으로 들어가서 해당 명령어 입력 후 나오는 것으로 하였다.
sudo mkdir -p /etc/containerd\
sudo su\
containerd config default > /etc/containerd/config.toml\
exit
nano를 이용해 /etc/containerd/config.toml 파일을 열어 SystemdCgroup 를 찾아 true로 바꾸고 아래 코드 수정 후 저장
sudo nano /etc/containerd/config.toml
# For OpenSSH CoreDNS
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
ShimCgroup = "system.slice"
CgroupParent = "kubelet"
Debug = true
서비스 재시작
sudo systemctl restart containerd
cgroup 설정
sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
check
sudo sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay
Kubelet, Kubeadm, Kubectl 설치
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
쿠버 버전이 변경되지 않도록 아래 명령어를 입력해준다.
sudo apt-mark hold kubelet kubeadm kubectl
Master Init
해당 명령어는 메인 Master가 될 노드에서만 실행해준다.
sudo kubeadm init --control-plane-endpoint "IP:6443" --pod-network-cidr=192.168.0.0/16 --upload-certs --node-name 노드명
권한설정 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Master Join
마스터 생성 시 나오는 내용 중 –control-plane이 포함된 명령어는 master node 를 위한 명령이다.
master를 위한 node에서만 해당 명령어를 입력해준다.
kubeadm join MAIN MASTER IP:6443 --token 토큰 \
--discovery-token-ca-cert-hash sha256:해쉬토큰 \
--control-plane --certificate-key 키토큰
Worker Join
마스터 생성 시 나오는 내용 중 마지막 명령어는 Worker가 Master에 Join하기 위한 명령이다.
worker를 위한 node에서만 해당 명령어를 입력해준다.
kubeadm join MAIN MASTER IP:6443 --token 토큰 \
--discovery-token-ca-cert-hash sha256:해쉬토큰 \
--certificate-key 키토큰
worker role 적용
kubectl label node 노드명 node-role.kubernetes.io/worker=worker
Overlay Network 설치
본 글에서는 Calico를 선택하여 사용했다.
https://docs.tigera.io/calico/latest/getting-started/kubernetes/kind
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
체크
watch kubectl get pods -l k8s-app=calico-node -A
train calico
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-