모든 명령은 root 권한으로 실행
apt update 된 상태
가능하면 확인하라는 파드가 다 생성된 후에 진행하면 좀 더 좋음
vi /etc/hostname
init 6
apt -y install containerd
cat > /etc/sysctl.d/99-k8s-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sysctl --system
modprobe overlay; modprobe br_netfilter
echo -e overlay\\nbr_netfilter > /etc/modules-load.d/k8s.conf
update-alternatives --config iptables
iptables-legacy 선택
# aws EC2일 경우 기본적으로 꺼져있는것으로 확인되나 free -m으로 확인 시 swap이 있으면 설정
swapoff -a
vi /etc/fstab
/swap.img none swap sw 0 0 이걸 다음처럼 변경, 주석 처리
#/swap.img none swap sw 0 0
aws 대시보드 등을 통해
쿠버네티스 구성 요소가 사용하는 포트에 대한 방화벽 오픈
개인적으로 보안을 크게 신경 안써도 되는 상황이라 편하게 같은 보안 그룹내에선 전부 열어주기로 함.
ex)

vi /etc/default/grub
11번째 줄을 다음처럼 변경
GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0"
update-grub
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
apt update
apt -y install kubeadm kubelet kubectl
vi /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs"
vi /usr/lib/systemd/system/containerd.service
[Service]
KillMode=mixed
systemctl daemon-reload
systemctl restart containerd.service
systemctl restart kubelet
# 아래 pod-network-cidr은 네트워크 내 다른 ip 안겹치게 조심(aws 같은 환경에서는 거의 무조건 192.168.0.0을 쓰는게 정신건강에 좋음/calico에서 권장하는바)
kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket=unix:///run/containerd/containerd.sock
#다음 명령어 마스터에서 실행 금지
#다음 명령어 마스터에서 실행 금지
#다음 명령어 마스터에서 실행 금지
##join 명령어 잘 복사 해둘 것##
kubeadm join 10.10.10.10:6443 --token cxkwps.ulzdqxmyu6yn6mgf \
--discovery-token-ca-cert-hash sha256:7e67fd12525711e899248c605735333959536f6bbdd7cb05816ca2c25d07944e
#다음 명령어 마스터에서 실행 금지
#다음 명령어 마스터에서 실행 금지
#다음 명령어 마스터에서 실행 금지
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
wget https://raw.githubusercontent.com/projectcalico/calico/master/manifests/calico.yaml
kubectl apply -f calico.yaml
kubectl get pods -A
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
kubeadm join 10.10.10.10:6443 --token cxkwps.ulzdqxmyu6yn6mgf \
--discovery-token-ca-cert-hash sha256:7e67fd12525711e899248c605735333959536f6bbdd7cb05816ca2c25d07944e
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
#이 명령어는 마스터에서 복사했던 명령어, 그대로 복사하면 안됨
kubectl get nodes
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
vi recommended.yaml
45번 라인을 추가
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:포트번호
포트번호를 확인
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
kubectl -n kube-system create token admin-user --duration=24h
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml
vi components.yaml
args:
- '--cert-dir=/tmp'
- '--secure-port=443'
- '--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname'
- '--kubelet-use-node-status-port'
- '--metric-resolution=15s'
- '--kubelet-insecure-tls' <---- 139번 라인 다음 줄에 이걸 추가
kubectl apply -f components.yaml
apt install open-iscsi -y
systemctl restart iscsid
systemctl enable iscsid
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.7.1/deploy/longhorn.yaml
kubectl get pods -n longhorn-system #명령어로 확인
kubectl apply -f - <<END
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: driver.longhorn.io
parameters:
dataLocality: disabled
fromBackup: ""
fsType: ext4
numberOfReplicas: "1"
staleReplicaTimeout: "30"
END
kubectl get storageclasses.storage.k8s.io #로 확인
kubectl edit svc -n longhorn-system longhorn-frontend
혹은 대시보드에서
type: ClusterIP # 기존에 ClusterIP로 되어 있는 걸 다음 처럼 변경
type: LoadBalancer # type 변경 NodePort든 metallb 사용한 LoadBalancer든