티스토리 뷰

728x90

 

서버 준비

- 나는 가상서버로 준비했다

- CPU는 2 cores, memory는 2GB 이상으로 준비해야 한다

hostname ip roles
k8s-master  192.168.0.40 control-plane
k8s-node1 192.168.0.41 worker
k8s-node2 192.168.0.42 worker

 

 

CentOS  설정

1) selinux 비활성화

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

 

2) swap 비활성화

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

 

3) 방화벽 비활성화

- 방화벽의 경우 필요한 포트만 오픈해주어도 되지만 편의를 위해 방화벽을 해제하였다.

# systemctl disable firewalld
# systemctl stop firewalld

 

​4) br_netfilter 설정

- pod끼리 통신을 가능할 수 있도록 하는 설정

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

 

5) iptables 커널 활성화

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

 

​6) 4번과 5번 내용을 적용

sysctl --system

7) hosts 설정

- 각각의 서버에서 hostname을 설정해준다

#master server
# hostnamectl set-hostname k8s-master
#node1 server
# hostnamectl set-hostname k8s-node1
#node2 server
# hostnamectl set-hostname k8s-node2

8) hosts등록

# cat <<EOF >> /etc/hosts
192.168.0.40 k8s-master
192.168.0.42 k8s-node1
192.168.0.43 k8s-node2
EOF

9) centos package update

# yum update -y

10) disabled_plugins 주석처리

- containered 를 runtime으로 사용 할 수 있도록 주석 처리를 해준다.

(그러면 docker 관련 설정은 안해도 되는거 아닌가..? 왜 했지..🥹)

# vi /etc/containerd/config.toml

 

# systemctl restart containerd

 

Docker관련 설정 

- docker 가 설치 되어있지 않은 경우에는 docker 설치가 필요하다.

 

1) daemon.json 편집

- cgroupdriver를 systemd로 설정 

#vi /etc/docker/daemon.json


{  
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

 

2) Docker 재실행

# systemctl restart docker

 kubernetes 설치

- 모든 서버에서 동일하게 실행시켜 준다

 

1) kubernetes yum repository 설정

# cat <<EOF>> /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpghttps://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

 

2) kubernetes 패키지 설치

# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

 

3) kubelet 실행

# systemctl enable kubelet && systemctl start kubelet

4) 설치 확인 (생략 가능)

# kubeadm version -o short
# kubectl version --short
# kubelet --version

 

Kubernetes 설정

[1] Master node 만들기

 

1) kubeadm 초기화

- 아래 명령어를 실행하면 다음과 같이 kubeadm으로 시작하는 명령어가 나오는데 이는 worker node들이 master노드와 연결 하기 위해 필요

#kubeadm init

 

* token 은 아래 명령어로 다시 출력 할 수 있다.

# kubeadm token create --print-join-command

 

​2) 환경변수 설정 - 사용 할 config 지정

- 나는 root 권한으로 실행 할 것이어서 KUBECONFIG 를 설정해주었다.

# export KUBECONFIG=/etc/kubernetes/admin.conf

 

​3) CNI 설치

https://kubernetes.io/docs/concepts/cluster-administration/addons/

 

Installing Addons

Note: This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide

kubernetes.io

- 종류가 매우 많으나 나는 weave 를 설치했다. 설치 할 수 있는 CNI 는 위 링크를 참고하면 된다. 

# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

[2] worker node 만들기

1) kubeadm join

- master node 에서 kubeadm 초기화 한 후 생긴 명령어를 실행 시켜 준다.

kubeadm join 192.168.0.40:6443 --token ryaljd.b1i9j39lllh901uw --discovery-token-ca-cert-hash sha256:e7625a92cea30e4c2b973b8513297fa9dc4b7b523dfb5b56a9772d2490fc2452

 

2) work node에 admin.conf 배포

- work node에서  `kubectl get nodes ` 명령어를 입력 하면 connection 에러가 나는데 이를 해결하기 위해서는 master에 있는 admin.conf 파일을 worker node에 배포를 해주어야 한다.

# mkdir -p $HOME/.kube
# scp [master IP]:/etc/kubernetes/admin.conf $HOME/.kube/config

 

* 혹시나 work node join시 문제가 생기는 경우 아래 명령어를 입력하여 reset 해 준 후 다시 join 하면 된다.

# kubeadm reset

 

쿠버네티스 설치 완료

# kubectl get nodes

 

nginx 배포해보기

1) nginx 컨테이너 실행

# kubectl run nginx-pod --image=nginx --port=80

2) pod 상태 확인

- pod의 status가 ContainerCreating -> Running으로 변경 된 것을 확인 할 수 있다.

# kubectl get pods

 

- 현재 어떤 worker node에서 실행 중인지 확인 하고 싶으면  -o wide를 입력해주면 된다.

- 현재 k8s-node1에서 10.34.0.0 IP로 실행 중이다.

# kubectl get pods -o wide

 

3) curl 명령어 실행해보기

# curl 10.34.0.0

 

4) pod 삭제

# kubectl delete pod nginx-pod
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함