os: centos7
1.기본 리눅스 설정
1-0. dns설정
#dns서버추가설정
/etc/resolv.conf
/etc/hosts
1-1.selinux 설정
production환경에서는 selinux를 활용하는것이 좋다. + securitycontext로 시스템접근제한을 거는게 좋다.
우리는 편의를 위해서 disable
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
#확인
sestatus
1-2. swap off설정
# swap off하고 fstab의 swap 주석처리
sudo swapoff -a && sudo sed -i '/swap / s/^/$/' /etc/fstab
1-3 firewall 해제
sudo systemctl disable firewalld
sudo systemctl stop firewalld
1-4 CRI에서 필요한 커널 설정 및 네트워크설정
-오버레이 모듈로드(image layer쌓기위한 linux기능)
sudo modprobe overlay
#확인
lsmod |grep overlay
-브릿지 필터 모듈 로드(/proc/sys/net경로에 설치됨)
sudo modeprobe br_netfilter
#확인
lsmod |grep br_netfilter
#확인2
cat /proc/sys/net/bridget/bridget-nf-call-iptables
#->1인지 확인
-cri에서 위 모듈 사용할 수 있게 설정
# cri에서 사용할수있게 conf설정
cat << EOF |sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
y
#cri에서 iptable가져다쓰게 forwarding하게
cat <<EOF |sudo tee /etc/sysctl.d/99-kubernete-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables =1
EOF
# 필요한 systctl파라미터를 설정하면 서버 재부팅후에도 유지됨
# 재부팅않고 sysctl파라미터 적용
sudo sysctl --system
2.Containerd 설치 및 설정
2-1.containerd 설치
https://containerd.io/releases/
containerd – Versioning and release
This document details the versioning and release plan for containerd. Stability is a top goal for this project, and we hope that this document and the processes it entails will help to achieve that. It covers the release process, versioning numbering, back
containerd.io
sudo yum install -y containerd.io-1.6.15
2-2.containerd config설정
containerd registry추가작업참고..
/etc/containerd/config.toml 의 설정 수정필요
1) root경로
containerd가 관리하는 컨테이너관련파일을 디렉토리에 저장하도록 함.
컨테이너의 루트파일시스템, 이미지, 메타데이터 등을 저장함
충분히 커질수있으므로 고려해서 설정필요하다.
[plugins."io.containerd.grpc.v1.cri".containerd]
root = "/var/lib/containerd"
2) private repo설정
--나중에별도작성
3) systemd_cgroup = true 설정
2-3. containerd 재시작
sudo systemctl enable containerd
sudo systemctl start containerd
#확인
sudo systemctl status containerd
3. kubectl설치 및 kubernetes 이미지들 다운로드
3-1. kubelet/kubeadm/kubectl설치
참고:
https://kubernetes.io/ko/releases/
https://kubernetes.io/ko/releases/version-skew-policy/
-버전확인:
kubeadm version
kubectl version
sudo yum install -y kubelet-1.25.6 kubeadm-1.25.6 kubectl-1.25.6 --disableexcludes=kubernetes
3-2. kubelet enalbe
systemctl enable --now kubelet
3-3. kubernetes 필수 이미지 준비
출력 명령어:
sudo kubeadm config images list
#실행결과
registry.k8s.io/kube-apiserver:v1.25.6
registry.k8s.io/kube-controller-manager:v1.25.6
registry.k8s.io/kube-scheduler:v1.25.6
registry.k8s.io/kube-proxy:v1.25.6
registry.k8s.io/pause3.8
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
4.kubernetes 클러스터 구동
4-1.kubeadm으로 구동
참고) https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "<master1 ip>"
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: "v1.25.6"
controlPlaneEndpoint: "<master1 ip>:6443"
dns:
imageRepository: <private registry>/k8s.gcr.io/coredns
imageRepository: <private registry>/k8s.gcr.io
networking:
podSubnet: "10.100.0.0/16"
apiServer:
extraArgs:
authorization-mode: Node,RBAC
service-node-port-range: 30000-501000
controllerManager:
extraArgs:
allocate-node-cidrs: "false"
sudo kubeadm init --config=kubeadm-config.yml
4-2. kubeconfig 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
*참고로 kubectl get node시 calico설치안된경우는 node not-ready, coredns도 pending상태이다.
cluster의 네트워크정책, pod간통신, DNS기반 로드밸런싱이 안되니 당연하다..
4-3.(필요시) 마스터 노드 join위한 certificate-key 생성
HA cluster구성을 위해 아래 명령어를 통해 certificate생성하자.
kubeadm init phase upload-certs
4-4.마스터 노드 join
kubeadm join --control-plane을 통해 HA cluster구성
*파라미터 설명:
--token: The token to user for establishing bidirectional trust between nodes and control-plane nodes.
--discovery-token-ca-cert-hash: For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>")
--upload-certs: Upload control-plane certificates to the kubeadm-certs Secret
Uploading control-plane certificates to the cluster By adding the flag --upload-certs to kubeadm init you can temporary upload the control-plane certificates to a secret in the cluster. Please note that this secret will expire automatically after 2 hours. The certificates are encrypted using a 32byte key that can be specified using --certificate-key. The same key can be used to download the certificates when additional control-plane nodes are joining , by passing --control-plane and --certificate-key to kubeadm join
'k8s 및 인프라 > k8s' 카테고리의 다른 글
tip)kubectl , helm 명령어 자동완성 (0) | 2024.03.18 |
---|---|
calico설치 &upgrade (0) | 2024.03.18 |
k8s 인증서 갱신 (0) | 2023.10.11 |