예시 호스트명 및 IP
k8s-m : 192.168.122.15
k8s-s : 192.168.122.16
설치 OS
CentOS 7버전
사전 요구사항 확인
kubespray 는 버전별로 사전 requirements가 조금씩은 다르다.
공식 Github 혹은 웹사이트에서 확인을 해야한다.
https://github.com/kubernetes-sigs/kubespray#requirements
GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster
Deploy a Production Ready Kubernetes Cluster. Contribute to kubernetes-sigs/kubespray development by creating an account on GitHub.
github.com
기본 서버 준비작업
- SELINUX OFF
#vi /etc/selinux/config
#selinux disabled 시키기
- 방화벽 내리기
#systemctl disable firewalld
#systemctl stop firewalld
- libselinux 올리기
# sudo yum install libselinux-python3
- 설치 유저의 Sudoers 등록
설치할 유저를 sudo권한을 등록한다. 사실.. root로 그냥 설치하길 권장한다. 권한 때문에 너무 짜증남.
/etc/sudoers에 kubeadm 을 등록하고 NOPASS로 설정한다.
그리고 wheel도 NOPASS를 활성화 시킨다.
#vi /etc/sudoers
--------------------
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
kubeadm ALL=(ALL) NOPASSWD: ALL
# 계정을 등록합니다.
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
#%wheel ALL=(ALL) ALL
# 여기를 주석처리 하고
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
# 여기를 주석해제 합니다.
-----------------------
- 시스템 작업
# swapoff -a
# sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
# cat /proc/sys/net/ipv4/ip_forward
- Cluster 구성요소 상호간 SSH 열어두기
# ssh-keygen
# ssh-copy-id -i ~/.ssh/id_rsa.pub [Remote Server Hostname OR IP]
해당 내용의 자세한 내용은
https://armyost.tistory.com/327
Linux 서버간 비밀번호 없이 ssh 허용하기
Local Host : 비밀번호 없이 ssh를 접속하는 행위의 주체 Remote Host : 접속 대상 서버 $ ssh-keygen $ ssh-copy-id -i ~/.ssh/id_rsa.pub [Remote Server Hostname OR IP] 예) ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-m ※ .ssh폴더 이하의 chm
armyost.tistory.com
- yum 레포지토리 권한 변경
설치끝날때까지만 열어두자 끝나고 755로 복구
# chmod 777 /etc/yum/pluginconf.d
여기까지 (?)의 기본 환경요소는 노드 모두 같아야 한다.
그리고 ansible playbook을 돌리는 아래 내용은 playbook을 실행할 노드(클러스터 중 1개 노드)에서 만 세팅하면 된다.
1. python3와 pip를 설치한다.
https://armyost.tistory.com/328
Linux Python 버전 조정하기
현재 서버에 설치된 python 버전확인하기 # ls /usr/bin | grep python python3 python3.6 Python 3 설치 # yum install python3 하지먄 OS에서 지원하는 버전이 한계가 있다. 이때는 다른 방법을 써야함. 설치된 Python 기
armyost.tistory.com
2. pip install을 통해 ansible 및 기타 구성요소를 설치 한다.
이때 kubernetes 홈페이지의 minimum requirement를 참고해야한다.
무작정 requirement 를 설치할게 아니라 ansible, jinja2 버전을 맞추어야하기 때문이다. 이부분이 가장 까다롭다.
ansible, jinja2 버전이 python 버전에 dependency가 있으므로 python 버전이 중요하다.
$ pip3 install -r requirements.txt
3. git으로 다운로드 받은 kubespray의 sample을 이용하여 커스텀된 템플릿을 만든다.
$ git clone https://github.com/kubernetes-sigs/kubespray.git
$ cd kubespray # 원활한 작업을 위해 디렉토리 이동
$ cp -rfp inventory/sample inventory/mycluster
$ declare -a IPS=(192.168.122.15 192.168.122.16)
4. Config 파일을 정의한다.
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python contrib/inventory_builder/inventory.py ${IPS[@]}
5. kubernetes 클러스터 노드의 역할과 대시보드 등 구성요소를 정의할 수 있는 설정파일을 만든다.
$ vi inventory/mycluster/hosts.yaml
------------------------------------
hosts:
k8s-m:
ansible_host: 192.168.122.15
ip: 192.168.122.15
access_ip: 192.168.122.15
k8s-s:
ansible_host: 192.168.122.16
ip: 192.168.122.16
access_ip: 192.168.122.16
children:
kube_control_plane:
hosts:
k8s-m:
kube_node:
hosts:
k8s-s:
etcd:
hosts:
k8s-m:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
$ vi inventory/mycluster/group_vars/k8s-cluster/addons.yml
---------------------------------------------------
...
dashboard_enabled: true
...
metrics_server_enabled: true
...
ingress_nginx_enabled: true
...
----------------------------
6. 기타 추가 구성요소를 설치한다. 사실 아래 내용은 ansible로 playbook을 돌리다보면 하게 되는 것들이다.
$ yum install python-netaddr
$ pip3 install markupsafe==2.0.1
7. 이제 ansible로 kubespray 설치 playbook을 돌리자
$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
8. 설치가 완료되고 나서 kubeconfig하기
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
참고
※ containerd로 런타임 사용할때 : 6, 7번 Step 사이에서 진행한다.
$ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
----------------------------------
container_manager: containerd
$ vi inventory/mycluster/group_vars/etcd.yml
----------------------------------
etcd_deployment_type: host
※ kubernetes 버전변경 시
$ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
----------------------------------
kube_version: v1.25.5
※ 배포한 kubernetes 환경을 초기화 할때
$ ansible-playbook -i inventory/mycluster/hosts.yaml reset.yml --become --become-user=root
# docker같은 런타임은 yum으로 지우면됨
#아쉽게도배포한 파일들은 삭제되지 않음으로 주의
'PaaS > Kubernetes' 카테고리의 다른 글
Docker Client가 http(https가 아닌) Registry를 접근할때 (0) | 2023.02.25 |
---|---|
kubernetes-dashboard용 Service Account를 만들자 (0) | 2022.12.23 |
(네이버클라우드 세션) 쿠버네티스 보안 세미나 요약 (0) | 2022.08.28 |
Cloud에서 k8s istio 상세설명+네트워크 흐름+Service Discovery (0) | 2022.07.11 |
Kubernetes PSP(Pod Security Policies)가 Deprecated가 되면 앞으로는 어떻게 보안레이어를 적용해야 할까? (0) | 2022.07.01 |