티스토리 뷰
서버 준비
- 나는 가상서버로 준비했다
- 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/
- 종류가 매우 많으나 나는 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
'인프라 > Kubernetes' 카테고리의 다른 글
- Total
- Today
- Yesterday
- softeer
- 코테
- 쿠버네티스
- java 코테
- 리액트
- 도커
- java
- mysql
- 자바코테
- 톰캣
- tomcat
- 아파치카프카
- Docker
- 자바
- centos
- 현대코테
- springboot
- 코딩테스트
- react
- softeer java
- 스프링
- 현대오토에버
- Kubernetes
- 전자정부프레임워크
- 현대
- 자바스크립트
- javascript
- Spring
- Linux
- 오토에버코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |