티스토리 뷰
전제 조건
배포 워크플로
1. Kubespray 다운로드 및 설치
- 로컬 컴퓨터에 작업 공간 폴더를 만듭니다.#mkdir -p ~/Projects/kubespray_workspace
root@tommypagy-VirtualBox:/home# mkdir -p ~/Projects/kubespray_workspace root@tommypagy-VirtualBox:~/Projects/kubespray_workspace# cd ~/Projects/kubespray_workspace
- Kubespray의 안정적인 최신 릴리스 를 다운로드하십시오 .
#wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/v2.15.1.tar.gz #tar -zxvf v2.15.1.tar.gz
- 큐브스프레이 추출
root@tommypagy-VirtualBox:~/Projects/kubespray_workspace# tar -zxvf v2.18.0.tar.gz kubespray-2.18.0/ kubespray-2.18.0/.ansible-lint kubespray-2.18.0/.editorconfig kubespray-2.18.0/.github/ kubespray-2.18.0/.github/ISSUE_TEMPLATE/ kubespray-2.18.0/.github/ISSUE_TEMPLATE/bug-report.md kubespray-2.18.0/.github/ISSUE_TEMPLATE/enhancement.md kubespray-2.18.0/.github/ISSUE_TEMPLATE/failing-test.md kubespray-2.18.0/.github/ISSUE_TEMPLATE/support.md kubespray-2.18.0/.github/PULL_REQUEST_TEMPLATE.md kubespray-2.18.0/.gitignore kubespray-2.18.0/.gitlab-ci.yml kubespray-2.18.0/.gitlab-ci/ kubespray-2.18.0/.gitlab-ci/lint.yml kubespray-2.18.0/.gitlab-ci/packet.yml kubespray-2.18.0/.gitlab-ci/shellcheck.yml
- Kubespray 폴더로 이동하여 requirements.txt 파일을 찾으십시오. 이 파일은 모든 종속성을 나열합니다.
- 다음 명령을 실행하여 모든 종속성을 설치합니다.
-
root@tommypagy-VirtualBox:~/Projects/kubespray_workspace# pip install -r requirements.txt Command 'pip' not found, but can be installed with: [파이썬이 없을경우 설치 하세요~] apt install python-pip root@tommypagy-VirtualBox:~/Projects/kubespray_workspace# apt install python-pip 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다: linux-hwe-5.4-headers-5.4.0-107 linux-hwe-5.4-headers-5.4.0-42 linux-hwe-5.4-heade ... 중략
2. 인프라 제공
앞서 언급한 바와 같이 원하는 환경과 인프라 프로비저닝 도구 조합을 선택할 수 있습니다. 인프라 토폴로지는 조직의 요구 사항(예: 마스터 또는 작업자 노드 수, 방화벽, 서브넷 CIDR 범위 등)을 기반으로 해야 합니다.
이 기사에서는 AWS EC2 VM을 인프라로 사용합니다. 로 이동하여 새로 추출한 Kubespray 폴더 내에서 샘플 Terraform 스크립트를 참조할 수 있습니다 ~/Projects/kubespray_workspace/kubespray-2.15.1/contrib/terraform/aws/.
- AWS 콘솔에 로그인
- 다음 AWS 자격 증명을 다운로드합니다.
- 액세스 키 ID
- SecretAccessKey
- EC2 키 페어
- 자격 증명.tfvars 업데이트 :
cd ~/Projects/kubespray_workspace/kubespray-2.15.1/contrib/terraform/aws/ cp credentials.tfvars.example credentials.tfvars
- 인프라 요구 사항에 따라 terraform.tfvars 를 업데이트 합니다.
- 다음 Terraform 스크립트를 실행하여 프로비저닝합니다.
terraform init terraform plan -out kubesprayplan -var-file=credentials.tfvars terraform apply "kubesprayplan"
- 생성된 호스트 인벤토리 파일을 확인합니다.
cat ~/Projects/kubespray_workspace/kubespray-2.15.1/inventory/hosts
- SSH 배스천 호스트 구성 파일을 확인합니다.
~/Projects/kubespray_workspace/kubespray-2.15.1/ssh-bastion.conf
3. Kubernetes 클러스터 배포
- AWS에서 얻은 ssh 프라이빗 키를 EC2 키 페어의 일부로 로드합니다.
cp test_aws_instance.pem ~/.ssh/test_aws_instance.pem chmod 600 ~/.ssh/test_aws_instance.pem eval $(ssh-agent) ssh-add -D ssh-add ~/.ssh/test_aws_instance.pem
- 추출된 Kubespray 루트 폴더로 이동합니다.
~/Projects/kubespray_workspace/kubespray-2.15.1
- 다음 Ansible 명령을 실행하여 인프라 위에 kubernetes 구성 요소를 설치합니다.
ansible-playbook -i ./inventory/hosts ./cluster.yml -e ansible_user=ubuntu -b --become-user=root
4. Kubernetes 클러스터에 액세스
배스천 호스트를 통해
- 다음을 실행합니다.
cd ~/Projects/kubespray_workspace/kubespray-2.15.1 ssh -F ssh-bastion.conf ubuntu@ sudo cat /etc/kubernetes/admin.conf mkdir ~/.kube/ sudo cp -R /etc/kubernetes/admin.conf ~/.kube/config sudo chown ubuntu:ubuntu ~/.kube/config
- 다음을 사용하여 확인합니다.
kubectl get nodes kubectl get ns
로컬 머신을 통해
- 다음을 실행합니다.
mkdir ~/.kube/
- admin.conf 의 내용을 복사합니다 .
/etc/kubernetes/admin.conf
- 다음 파일의 내용을 붙여넣습니다.
~/.kube/config
- 파일을 편집하고 server: https://127.0.0.1:6443다음으로 바꿉니다.
server: https://<aws_elb_dns_name>:6443
- 다음을 사용하여 확인합니다.
kubectl get nodes kubectl get ns
5가지 기본 클러스터 작업을 수행하는 방법
Kubernetes 노드 제거
ansible-playbook -i ./inventory/hosts ./remove-node.yml -e ansible_user=ubuntu -b --become-user=root --extra-vars "node=ip-10-250-212-108.ap-south-1.compute.internal"
동일한 Kubernetes 노드 다시 추가
ansible-playbook -i ./inventory/hosts ./scale.yml -e ansible_user=ubuntu -b --become-user=root
Kubernetes 버전 확인
kubectl version
Kubernetes 버전 업그레이드
ansible-playbook -i ./inventory/hosts ./upgrade-cluster.yml -e ansible_user=ubuntu -b --become-user=root -e kube_version=<replace_kubernetes_version_you_want_to_upgrade>
해체 또는 정리 인프라
cd ~/Projects/kubespray_workspace/kubespray-2.15.1/contrib/terraform/aws/
terraform destroy -var-file=credentials.tfvars
Kubespray 업그레이드
Kubespray는 업그레이드 시 릴리스 버전을 건너뛰는 것을 지원하거나 권장하지 않습니다. 예를 들어 버전 1.0.0을 사용 중이고 5.0.0으로 업그레이드하려면 모든 공식 Kubespray 릴리스에 대해 2.0.0, 3.0.0 등으로 업그레이드해야 합니다.
***************
[k8s] Kubespray로 Kubernetes 설치하기
Kubespray는 쿠버네티스를 쉽게 설치하는 자동화 도구입니다. Ansible의 playbook과 inventory 설정을 통해서
Kubernetes 클러스터를 설정해 보고자 합니다.
Kubernetes는 최소 1개의 Mater Node와 1개의 Worker Node 1개가 필요합니다.
하지만, 1개의 Master Node와 3개의 Worker Node 클러스터로 구성해 보고자 합니다.
Requirements (요구 사항)
- Ansible Playbook을 실행하려면 Jinja 2.9 이상이 필요합니다.
- Docker 이미지를 가져 오려면 대상 서버가 인터넷에 액세스 할 수 있어야합니다.
- 인벤토리의 모든 서버 부분에 SSH 키를 복사해야합니다.
- 배포 중 문제를 방지하려면 방화벽을 비활성화해야합니다.
Configuration (구성)
Node | HostName | IP | DNS |
Master Node | controller | 192.168.122.10 | 8.8.8.8 |
Worker Node | node1 | 192.168.122.21 | 8.8.8.8 |
node2 | 192.168.122.22 | 8.8.8.8 | |
node3 | 192.168.122.23 | 8.8.8.8 |
요구사항 해결하기
1. Ansible을 사용하기 위해 인벤토리의 모든 서버에 SSH 키를 복사해야합니다. Master Node에서 키를 생성하고
각 노드에 복사해야합니다.
- Key 기반 인증을 사용할 수 있도록 SSH
ssh-keygen
... 기본값으로 설정하여 skygen을 생성합니다.
- Master Node와 Worker Node에 모두 키를 복사합니다.
ssh-copy-id 192.168.122.10
ssh-copy-id 192.168.122.21
ssh-copy-id 192.168.122.22
ssh-copy-id 192.168.122.23
2. 배포 중 문제를 방지하려면 방화벽을 비활성화하거나 정책에 맞게 설정해야합니다.
배포 중 문제를 방지하려면 방화벽을 비활성화해야합니다.
Control-node
TCP | Inbound | 6443* | Kubernetes API server | All |
TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 10251 | kube-scheduler | Self |
TCP | Inbound | 10252 | kube-controller-manager | Self |
Worker node
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 30000-32767 | NodePort Services† | All |
case 1) 방화벽을 끄는방법
sudo systemctl stop firewalled
sudo systemctl disabled firewalled
case 2) 노드의 정책에 맞는 포트를 추가 하는방법
참고 : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Control-node
sudo firewall-cmd --add-port=6443/tcp --permanent
sudo firewall-cmd --add-port=2379-2380/tcp --permanent
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=10251/tcp --permanent
sudo firewall-cmd --add-port=10252/tcp --permanent
sudo firewall-cmd --reload
worker node
sudo firewall-cmd --add-port=10250/tcp --permanent
sudo firewall-cmd --add-port=30000-32767/tcp --permanent
sudo firewall-cmd --reload
3. 루트가 아닌 사용자 계정에서 kubespray를 실행하는 경우 대상 서버에서 올바른 권한방법을 구성해야합니다.
각 노드들에게 패스워드 없이 sudo를 사용하도록 설정해 줍니다.
echo 'kim ALL=NOPASSWD: ALL' >> /etc/sudoers
deployment (배포하기)
배포는 kubespray git 저장소 사이트를 참조해서 설치해 보겠습니다. 아래 패키지를 먼저 설치해 주세요. 참고: https://github.com/kubernetes-sigs/kubespray
0. 설치에 필요한 패키지들을 설치해 줍니다.
sudo yum install -y git
sudo yum install -y python3
1. git clone 를 통해 코드를 가져옵니다.
git clone https://github.com/kubernetes-sigs/kubespray.git
2. requirements.txt 의 종속파일을 설치합니다.
sudo pip3 install -r requirements.txt
3. sample 파일을 mycluster 폴더에 복사하여 이용해 보겠습니다.
cp -rfp inventory/sample inventory/mycluster
4. inventory 파일을 통해 배포하기 위해 inventory/mycluster/inventory.ini 의 내용을 적절히 수정해 줍니다.
인벤토리 파일 작성
# inventory/mycluster/inventory.ini
[all]
master ansible_host=192.168.122.10 ip=192.168.122.10 etcd_member_name=etcd1
node1 ansible_host=192.168.122.21 ip=192.168.122.21
node2 ansible_host=192.168.122.22 ip=192.168.122.22
node3 ansible_host=192.168.122.23 ip=192.168.122.23
# node4 ansible_host=95.54.0.15 # ip=10.3.0.4 etcd_member_name=etcd4
# node5 ansible_host=95.54.0.16 # ip=10.3.0.5 etcd_member_name=etcd5
# node6 ansible_host=95.54.0.17 # ip=10.3.0.6 etcd_member_name=etcd6
# ## configure a bastion host if your nodes are not directly reachable
# bastion ansible_host=x.x.x.x ansible_user=some_user
[kube-master]
master
# node1
# node2
[etcd]
master
# node2
# node3
[kube-node]
node1
node2
node3
# node4
# node5
# node6
[calico-rr]
[k8s-cluster:children]
kube-master
kube-node
calico-rr
5. ping 모듈을 통해서 노드간 통신이 이루어 지는지 확인합니다.
ansible all -i inventory/mycluster/inventory.ini -m ping
6. cluster.yaml 파일을 통해 배포해 보겠습니다
ansible-playbook -i inventory/mycluster/inventory.ini -become --become-user=root cluster.yml
배포 완료 후의 이미지
7. kubectl 명령어를 일반계정에서 사용하기 위해 config파일을 복사했습니다.
sudo cp -r /root/.kube ~/.kube
sudo chown -R $USER:$USER ~/.kube
kubectl 명령어를 통해 설치된 노드들을 확인할 수 있습니다.
$ kubectl get no
NAME STATUS ROLES AGE VERSION
master Ready master 42h v1.18.8
node1 Ready <none> 6h8m v1.18.8
node2 Ready <none> 4h46m v1.18.8
node3 Ready <none> 4h46m v1.18.8
참고자료
- https://kubernetes.io/docs/setup/production-environment/tools/kubespray/
'3. 쿠버네티스의 모든것' 카테고리의 다른 글
쿠버네티스 마스터 vagrant.txt (0) | 2020.11.10 |
---|---|
3탄!! Kubernetes 구성도 알아보자! (0) | 2020.08.05 |
윈도우 10에 도커, 쿠버네티스 설치 (도커 데스크탑) (0) | 2020.07.11 |
쿠버네티스 디플로이먼트 (0) | 2020.07.11 |
쿠버네티스 가상스토리지(Ceph) 설치 (0) | 2020.07.10 |
- Total
- Today
- Yesterday
- CVE 취약점 점검
- startup 에러
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- 쿠버네티스
- 오라클
- 여러서버 컨트롤
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- (InstantClient) 설치하기(HP-UX)
- [오라클 튜닝] sql 튜닝
- 설치하기(HP-UX)
- 커널
- 트리이스
- 5.4.0.1072
- [오라클 튜닝] instance 튜닝2
- ubuntu
- directory copy 후 startup 에러
- 튜닝
- 스토리지 클레스
- Oracle
- 버쳐박스
- 코로나19
- 키알리
- 테라폼
- 오라클 홈디렉토리 copy 후 startup 에러
- K8s
- pod 상태
- 우분투
- MSA
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 앤시블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |