k8s가 사용하는 포트영역이 30개 정도 돼서 disable하고
환경 구성한다.
sudo ufw disable
sudo ufw status
가상메모리는 메모리가 아니다.
idle 상태의 process가 대기하는 것을 말한다.
-> container(process)가 swap에 가지못하게 해야한다.
----> 애플리케이션 성능 유지를 위해 해제를 해야한다.
sudo swapoff -a # 현재 부팅 중인 상태에서만 off 되는 것
# 리부팅 하면 다시 켜짐
free
--------------------------------------------------
# 리부팅 해도 꺼지도록하는 세팅
sudo vi /etc/fstab
# 밑에 부분 주석 처리
# UUID=26ab4f8e-7855-46d1-8cc9-917f05bc13f8 none swap sw 0 0
# 클러스터 서버간의 시간 동기화 필수
sudo apt -y install ntp
sudo systemctl enable ntp
sudo systemctl restart ntp
sudo systemctl status ntp
sudo ntpq -p
sudo -i
cat /proc/sys/net/ipv4/ip_forward
>>> 0
echo "1" > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
>>> 1
sudo vi /etc/modules-load.d/containerd.conf
overlay
br_netfilter # iptable이 사용하는 원천 기술
작성 후 저장하고 나오기
sudo modprobe overlay
sudo modprobe br_netfilter
sudo vi /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
작성 후 저장하고 나오기
sudo vi /etc/modules-load.d/k8s.conf
br_netfilter
작성 후 저장하고 나오기
sudo vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
작성 후 저장하고 나오기
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2
위 사이트에서 1번과 2번 과정만 수행한다.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo sh -c "containerd config default > /etc/containerd/config.toml"
vi /etc/containerd/config.toml
1 disabled_plugins = []
125 SystemdCgroup = false
위로 세팅
sudo systemctl restart containerd.service
sudo systemctl status containerd.service
sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo usermod -aG docker student
sudo systemctl restart daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
sudo systemctl status docker
sudo reboot
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
kubeadm > 클러스터 초기화, 노드 연결, 버전 변경
kubectl > CLI
kubelete (daemon) > 노드간 통신, master 노드로부터 명령 지시를 받는 프로세스
sudo apt-cache policy kubeadm
>>>
kubeadm:
Installed: (none)
Candidate: 1.29.2-1.1
Version table:
1.29.2-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.29/deb Packages
1.29.1-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.29/deb Packages
1.29.0-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.29/deb Packages
#### 최신 버전
sudo apt -y install kubeadm kubectl kubelet
#### 버전 지정
sudo apt -y install kubeadm=1.29.0-1.1 kubectl=1.29.0-1.1 kubelet=1.29.0-1.1
#### 설치 후 버전 확인
kubeadm version
kubectl version
kubelet --version
이 때, sudo apt update를 하면
kubeadm, kubectl, kubelet 버전도 같이 올라가기 때문에,
버전 홀드를 해주어야한다.
sudo apt-mark hold kubeadm kubectl kubelet
kubelet 데몬 등록 실행
sudo systemctl daemon-reload
sudo systemctl enable --now kubelet
hosts 등록
sudo vi /etc/hosts
192.168.56.100 k8s-master
192.168.56.101 k8s-node1
192.168.56.102 k8s-node2
sudo hostnamectl set-hostname k8s-node1
sudo hostnamectl set-hostname k8s-node2
sudo vi /etc/hosts
127.0.0.1 <hostname>
kubeadm init # control-plane 영역의 주요 구성요소 설치하는 작업
############### ETCD
############### api-server
############### codeDNS
############### kube-proxy
############### scheduler
############### controller
init 작업
1) 기본작업 kubeadm init
2) 네트워크 영역지정 방법 --pod-network-cidr=10.96.0.0/12
3) 실무에서는 서비스 대역도 지정해야한다. --service-cidr=20.96.0.0/16
kubeadm init --pod-network-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.56.100
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 워커노드에서 실행
kubeadm join 192.168.56.100:6443 --token <TOKEN>
워커노드가
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
k apply -f calico.yaml
alias dtoken='kubectl -n kubernetes-dashboard create token admin-user'
source <(kubectl completion bash)
source <(k completion bash)
alias k=kubectl
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
cd dashboard-rbac
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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: kubernetes-dashboard
k apply -f sa.yaml
mkdir dashboard_rbac
cd dashboard_rbac
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-admin"
sudo cp /etc/kubernetes/pki/ca.crt .
SCP로
ca.crt
ClusterRoleBinding-admin-user.yaml
dashboard-admin-user.yaml
kubecfg.crt
kubecfg.key
kubecfg.p12
가 들어있는 dashboard폴더를 로컬로 가져온다.
그 이후로
certutil.exe -addstore "Root" ca.crt
certutil.exe -p k8spass# -user -importPFX kubecfg.p12
을 실행한다.
그리고
대시보드 주소
이로 들어가면 로컬에 등록한 인증서를 선택하면 들어갈 수있다.
metric(측정단위) 수집기
- 자원 사용률
- 실시간 stream으로 제공 (node-exporter)
- 수집된 데이터 DB화 시켜 저장 -> PromQL 언어로 조회, 분석
- 높은 수준의 시각화를 위해 Grafana 연동
프로메테우스는 DBMS이다.
- Time-Series DBMS 랭킹 중 무려 2등이다.
sudo apt -y install git
git clone https://github.com/brayanlee/k8s-prometheus.git