Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

JINIers

centos에 k8s 설치 본문

공부/Docker&K8S

centos에 k8s 설치

JINIers 2023. 1. 5. 14:17

CentOS 7에 k8s 설치(on-prem)

master node / work node 설치방법은 동일하나 init 후 는 약간 다름

작성은 마스터노드 기준으로 하였다.

 

* 맨 아래는 init 시 발생하는 에러에 관한 트러블슈팅 방법 작성


K8S install(master,work node 공통 실행)

selinux 종료

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

 

swap 기능 off

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a

 

방화벽 끄기

systemctl disable firewalld
systemctl stop firewalld

 

netfilter 설정

cat <<EOF>> /etc/modules-load.d/k8s.conf
br_netfilter
EOF

하고 꼭 ls나 cat으로 만들어졌는지 확인

 

config 파일 설정

cat <<EOF>> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

 

sysctl --system

sysctl --system

 

host 파일에 node 등록

vi /etc/hosts
192.168.100.35 master-song
192.168.100.36 work-song

/etc/hosts 에 node 등록

 

시스템 업데이트(좀 걸린다.)

yum update -y

 

repo 설정변경

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes] 
name=Kubernetes 
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

 

docker 설치

curl -s https://get.docker.com | sudo sh
systemctl enable docker
systemctl start docker

 

docker deamon 설정 변경

* 처음엔 cgroup = cgroup 으로 되어있으나 이걸 systemd 로 변경해준다.

cat <<EOF>> /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

변경 후에 꼭 재시작 해준다.

service docker restart

변경 확인

docker info | grep -i group

k8s 설치

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernets

** kubelet 과 kubeadm은 충돌이 잘 난다.

그럴땐 당황하지 말고 kubelet을 지웠다가 재설치한다.

#kubelet 제거
yum remove kubelet

# kubelet 재설치
yum install kubeadm -y

 

kubeconfig 변수지정

export KUBECONFIG=/etc/kubernetes/admin.conf

 

master-node / work-node 공통 설치는 여기까지

아래로는 master와 work를 나눴다.


master-node install 마무리

 

kubeadm init

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=[마스터노드 ip 입력]

kubeadm init 시 이렇게 뜬다.

 

마스터 노드에 뜬 빨간 부분을 그대로 복사해서 적용한다.

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

 

k8s 네트워크 플러그인 설치(23년 01월 기준)

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml

* k8s 전용 네트워크 플러그인을 설치해주지 않으면 get node 했을 시 status가 Not Ready에서 Ready로 바뀌지 않으므로 꼭 설치해준다.


work-node install 마무리

마스터노드에서 나온 토큰을 복사해서 입력한다.(노란부분)

 

그럼

get node 해보라고 하는데 master node에서 work-node가 붙은 것을 확인할 수 있다.

 


kubeadm init 시 error에 관한 방법

error 1.

마스터노드에서 kubeadm init을 하면 에러가 자주난다.

보통

[init] Using Kubernetes version: v1.26.0
[preflight] Running pre-flight checks
        [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: E0104 23:33:51.790539   54280 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2023-01-04T23:33:51-05:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

위에거랑 같은거임

 

이런 에러가 자주 날것

그럴땐 당황하지 말고 restart를 해주면 된다.

systemctl restart containerd
systemctl restart docker

restart 후 상태 확인 꼭 해주고

systemctl status containerd
systemctl status docker

 

그 뒤에 다시 init 하면 됨

 


error 2

containerd config default | tee /etc/containerd/config.toml 관한 에러

 

컨테이너 관련해서 

containerd config default | tee /etc/containerd/config.toml

어쩌고 에러가 뜰 수 있다.

 

그럴 땐 파일을 지워주자.

rm /etc/containerd/config.toml

error 3.

W0104 23:28:09.805820   54067 cleanupnode.go:134] [reset] Failed to evaluate the "/var/lib/kubelet" directory. Skipping its unmount and cleanup: lstat /var/lib/kubelet: no such file or directory 에러

 

kubeadm reset을 하다보면 kubelet 파일이나 디렉토리가 없다고 한다.

대충 파일이랑 디렉토리가 없어서 어쩌고 웅앵웅

 

쿨하게 지워주자

yum remove kubelet

 

그리고 다시 설치하자

yum install kubeadm

 


error 4.

kubelet service disable

[preflight] Running pre-flight checks
        [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: E0111 20:33:46.955031   54651 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2023-01-11T20:33:46-05:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

대충 이런 에러가 발생했을 때

systemctl enable kubelet.service

 

Comments