k8s 및 인프라/k8s

폐쇄망 onpremise k8s 셋업

DanielZZI 2024. 3. 18. 23:04
728x90

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