Ansible Automation을 사용하여 AWS에 다중 노드 Kubernetes 클러스터 배포
용례
선결 조건: (RHEL-8)
IAM
를 만들고 해당 사용자access key
와 secret key
를 기록합니다.Key pair
형식의 (.pem)
를 만들고 로컬 시스템에서 다운로드하고 WinSCP
를 통해 RHEL-8을 통해 전송한다.1단계: Ansible 설치 및 구성
기본 운영 체제(RHEL8)에 Ansible을 설치하고 Ansible 구성 파일을 구성합니다.
이를 위해서는 다음 명령을 사용하십시오 -
yum install python3 -y
pip3 install ansible -y
vim /etc/ansible/ansible.cfg
참고: Python
Ansible을 설정하려면 운영 체제에 설치해야 합니다.구성
ansible.cfg
파일에 다음 명령을 씁니다.이를 위해 vi
, vim
, gedit
등 모든 편집기를 선택할 수 있습니다 -[defaults]
inventory=/root/ip.txt #inventory path
host_key_checking=False
command_warnings=False
deprecation_warnings=False
ask_pass=False
roles_path= /root/roles #roles path
force_valid_group_names = ignore
private_key_file= /root/awskey.pem #your key-pair
remote_user=ec2-user
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
2단계: 역할 만들기
🔶 캐릭터 작업 구역에 들어갑니다.
cd /roles
다음 명령을 사용하여 3개의 다른 캐릭터를 만듭니다# ansible-galaxy init <role_name>
ansible-galaxy init kube_cluster
ansible-galaxy init k8s_master
ansible-galaxy init k8s_slave
3단계: Kubernetes 클러스터의 역할 작성
🔶 작업 폴더에 들어갑니다.우리는 이 폴더에 모든 작업을 기록해야 한다
cd /roles/kube_cluster/tasks
vim main.yml
🔶 I am going to create cluster over
Amazon Linux instances
.
Write below source code inside it-
- name: Installing boto & boto3 libraries
pip:
name: "{{ item }}"
state: present
loop: "{{ lib_names }}"
- name: Creating Security Group for K8s Cluster
ec2_group:
name: "{{ sg_name }}"
description: Security Group for allowing all port
region: "{{ region_name }}"
aws_access_key: "{{ access_key }}"
aws_secret_key: "{{ secret_key }}"
rules:
- proto: all
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
cidr_ip: 0.0.0.0/0
- name: Launching three EC2 instances on AWS
ec2:
key_name: "{{ keypair }}"
instance_type: "{{ instance_flavour }}"
image: "{{ ami_id }}"
wait: true
group: "{{ sg_name }}"
count: 1
vpc_subnet_id: "{{ subnet_name }}"
assign_public_ip: yes
region: "{{ region_name }}"
state: present
aws_access_key: "{{ access_key }}"
aws_secret_key: "{{ secret_key }}"
instance_tags:
Name: "{{ item }}"
register: ec2
loop: "{{ instance_tag }}"
- name: Add 1st instance to host group ec2_master
add_host:
hostname: "{{ ec2.results[0].instances[0].public_ip }}"
groupname: ec2_master
- name: Add 2nd instance to host group ec2_slave
add_host:
hostname: "{{ ec2.results[1].instances[0].public_ip }}"
groupname: ec2_slave
- name: Add 3rd instance to host group ec2_slave
add_host:
hostname: "{{ ec2.results[2].instances[0].public_ip }}"
groupname: ec2_slave
- name: Waiting for SSH
wait_for:
host: "{{ ec2.results[2].instances[0].public_dns_name }}"
port: 22
state: started
소스 코드 설명:
pip
모듈을 사용하여 두 개의 패키지-boto
와 boto3
를 설치하고 있다. 왜냐하면 이 패키지들은 AWS에 연락해서 EC2 실례를 시작할 수 있기 때문이다.ec2_group
모듈로 AWS에서 보안 그룹을 만듭니다.ec2
AWS에서 인스턴스의 모듈을 시작합니다.
register
keyword will store all the Metadata in a variable calledec2
so that in future we can parse the required information from it.
loop
which again using one variable which contains one list.
item
keyword we are calling the list values one after another.
add_host
module which has the capability to create one dynamic inventory while running the playbook.
hostname
keyword tells the values to store in the dynamic host group.
wait_for
module to hold the playbook for few seconds till all the node’s SSH service started.
access key
andsecret key
are stored insidevault
files to hide it from other users.
🔶 vars 폴더로 들어갑니다.우리는 이 폴더에 모든 변수를 써야 한다.
We can directly mention variables inside tasks file but it is good practice to write them inside
vars
files so that we can change according to our requirements.
cd /roles/kube_cluster/vars
vim main.yml
안에 다음 소스 코드를 쓰세요-instance_tag:
- master
- slave1
- slave2
lib_names:
- boto
- boto3
sg_name: Allow_All_SG
region_name: ap-south-1
subnet_name: subnet-49f0e521
ami_id: ami-010aff33ed5991201
keypair: awskey
instance_flavour: t2.small
4단계: Kubernetes Master의 역할 작성
🔶 다음은 k8s 호스트를 설정할 때 반드시 포함해야 하는 절차입니다 -
cd /roles/k8s_master/tasks
vim main.yml
안에 다음 소스 코드를 쓰세요-- name: "Installing docker and iproute-tc"
package:
name:
- docker
- iproute-tc
state: present
- name: "Configuring the Yum repo for kubernetes"
yum_repository:
name: kubernetes
description: Yum for k8s
baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled: yes
gpgcheck: yes
repo_gpgcheck: yes
gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- name: "Installing kubeadm,kubelet kubectl program"
yum:
name:
- kubelet
- kubectl
- kubeadm
state: present
- name: "Enabling the docker and kubenetes"
service:
name: "{{ item }}"
state: started
enabled: yes
loop:
- kubelet
- docker
- name: "Pulling the config images"
shell: kubeadm config images pull
- name: "Confuring the docker daemon.json file"
copy:
dest: /etc/docker/daemon.json
content: |
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
- name: "Restarting the docker service"
service:
name: docker
state: restarted
- name: "Configuring the Ip tables and refreshing sysctl"
copy:
dest: /etc/docker/daemon.json
content: |
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
- name: "systemctl"
shell: "sysctl --system"
- name: "Starting kubeadm service"
shell: "kubeadm init --ignore-preflight-errors=all"
- name: "Creating .kube Directory"
file:
path: $HOME/.kube
state: directory
- name: "Copying file config file"
shell: "cp -i /etc/kubernetes/admin.conf $HOME/.kube/config"
ignore_errors: yes
- name: "Installing Addons e.g flannel"
shell: "kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml"
- name: "Creating the token"
shell: "kubeadm token create --print-join-command"
register: token
- debug:
msg: "{{ token.stdout }}"
소스 코드 설명:
1. K8s 클러스터를 설정하려면 마스터 노드에
kubeadm
프로그램을 설치해야 합니다.Docker
, Kubeadm
와 iproute-tc
패키지를 설치하고 있다.service
모듈은 docker &kubelet 서비스를 시작하는 데 사용됩니다.command
모듈에서kubeadm 명령을 실행합니다. 이 명령은 Kubernetes 그룹을 실행하는 데 필요한 모든 Docker 이미지를 가져옵니다.systemd
로 변경해야 합니다. 그렇지 않으면 kubeadm에서 K8s 클러스터를 설정할 수 없습니다.이를 위해 우리는 먼저 copy
모듈을 사용하여 파일/etc/docker/daemon.json
을 만들고 그 안에 내용을 넣는다.command
모듈을 사용하여 집단을 초기화한 다음에 shell
모듈을 사용하여 메인 노드에 kubectl
명령을 설정합니다.command
모듈 IFlannel
를 사용하여 덮어쓰기 네트워크 설정을 만들 수 있습니다.command
모듈도 노드에서 집단에 가입한 영패를 획득하는 데 사용된다.register
, 두 번째 command
모듈의 출력을 token
라는 변수에 저장합니다.현재, 이 영패 변수는 주 노드에 들어갈 수 있도록 종속 노드에서 실행해야 하는 명령을 포함하고 있습니다.5단계: 쿠베르네트스 노예를 위한 역할 작성
🔶 다음은 k8s 랜덤을 설정하는 데 필요한 절차입니다 -
🔶 작업 폴더에 들어갑니다.우리는 이 폴더에 모든 작업을 기록해야 한다
cd /roles/k8s_slave/tasks
vim main.yml
안에 다음 소스 코드를 쓰세요-- name: "Installing docker and iproute-tc"
package:
name:
- docker
- iproute-tc
state: present
- name: "Configuring the Yum repo for kubernetes"
yum_repository:
name: kubernetes
description: Yum for k8s
baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled: yes
gpgcheck: yes
repo_gpgcheck: yes
gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- name: "Installing kubeadm,kubelet kubectl program"
yum:
name:
- kubelet
- kubectl
- kubeadm
state: present
- name: "Enabling the docker and kubenetes"
service:
name: "{{ item }}"
state: started
enabled: yes
loop:
- kubelet
- docker
- name: "Pulling the config images"
shell: kubeadm config images pull
- name: "Confuring the docker daemon.json file"
copy:
dest: /etc/docker/daemon.json
content: |
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
- name: "Restarting the docker service"
service:
name: docker
state: restarted
- name: "Configuring the Ip tables and refreshing sysctl"
copy:
dest: /etc/sysctl.d/k8s.conf
content: |
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
- name: "systemctl"
shell: "sysctl --system"
- name: joining to Master
command: "{{ hostvars[groups['ec2_master'][0]]['token']['stdout'] }}"
6단계: Ansible Vault 파일 작성
🔶 캐릭터 작업 구역에 들어갑니다.
🔶 다음 명령을 실행하고vault 파일을 만듭니다
# ansible-vault create <filename>.yml
ansible-vault create cred.yml
🔶 그것은 당신의 선택에 따라 금고 비밀번호를 요구할 것입니다.🔶 그리고 편집기로 그것을 열고 이 파일에 두 개의 변수를 만들고 AWS
access key
와 secret key
를 값으로 합니다.예를 들면 다음과 같습니다.
access_key: ABCDEFGHIJKLMN
secret_key: abcdefghijklmn12345
🔶 명령(:wq)
을 사용하여 파일을 저장합니다.단계 7: 설치 파일 만들기
이제 마침내 같은 작업 구역에서
setup.yml
파일을 만들 때가 왔다. 우리는 이 작업 구역을 실행하여 AWS에 전체 인프라를 설치할 것이다.- hosts: localhost
gather_facts: no
vars_files:
- cred.yml
tasks:
- name: "Running kube_cluster role"
include_role:
name: kube_cluster
- hosts: ec2_master
gather_facts: no
tasks:
- name: Running K8s_Master Role
include_role:
name: k8s_master
- hosts: ec2_slave
gather_facts: no
tasks:
- name: Running K8s_Slave Role
include_role:
name: k8s_slave
🔶 Write proper
hostname
,vault file name
androle name
.
8단계:Ansible 시나리오 실행
🔶 다음 명령을 사용하여 ansible playbook을 실행합니다.
ansible-playbook setup.yml --ask-vault-pass
🔶 그런 다음 Ansible Vault(cred.yml 파일)의 암호를 전달하고 암호를 제공하라는 메시지가 표시됩니다.예!,그것은 전체 인프라 시설을 성공적으로 운행하고 설치했다
9단계: 테스트...
🔶 이제 우리 다중 노드 집단이 다음 명령을 사용했는지 확인해 봅시다.
kubectl get nodes
🔶 여기에서, 우리는 우리의 who 집단이 성공적으로 시작되었고, 우리의 모든 노드가 준비되어 있음을 볼 수 있다.
🔶 이제 주 노드에 배치를 만듭니다
kubectl create deployment myd --image=httpd
🔶 여기서 우리는 우리의 배치가 성공적으로 창설되었음을 볼 수 있다
GitHub 링크: https://github.com/surajwarbhe/K8s-master-slave-on-aws
LinkedIn 프로필:
Reference
이 문제에 관하여(Ansible Automation을 사용하여 AWS에 다중 노드 Kubernetes 클러스터 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/surajwarbhe/deploying-multi-node-kubernetes-cluster-on-aws-using-ansible-automation-1b7e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)