実現可能な自動化を用いたAWS上の多ノードKubernetesクラスタの展開
米国特許
必要条件: ( RHER - 8用)
IAM
ユーザーが管理者のアクセスを持って、メモをダウンaccess key
and secret key
Key pair
イン(.pem)
AWS雲の形式、あなたのローカルシステムでそれをダウンロードしてWinSCP
. ステップ1:使用可能なインストールと設定
ベースOS(RHR 8)でansibleをインストールします.
コマンドの下で使用するには-
yum install python3 -y
pip3 install ansible -y
vim /etc/ansible/ansible.cfg
注意:Python
セットアップにANOSでOSにインストールする必要があります.あなたの設定に以下のコマンドを書きなさい
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
, これらのパッケージはEC 2インスタンスを起動するためにAWSに連絡する能力を持っているので.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マスターのために書く役割
🔶 以下は、K 8 Sマスターを構成するための役割を含めなければならないステップです
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 .インストールする必要があります
kubeadm
K 8 Sクラスタのセットアップにマスターノードのプログラム.Docker
, Kubeadm
& iproute-tc
マスターインスタンスのパッケージ.service
モジュールはDocker & Kuveletサービスを開始するために使用されます.command
Kubenetesクラスタを実行するのに必要なすべてのDockerイメージを引くKubeadmコマンドを実行するモジュール.systemd
, さもなければKubeadmはK 8 sクラスタを設定できません.初めて使うcopy
モジュールを作成します/etc/docker/daemon.json
& いくつかのコンテンツを入れます.command
モジュールをクラスタ化してからshell
モジュールの設定kubectl
マスターノードのコマンド.command
モジュールの配備Flannel
Koubernetesクラスタでオーバーレイネットワーク設定を作成します.command
モジュールを使用して、スレーブノードがクラスタに結合するトークンを取得します.register
2番目の出力を保存しましたcommand
モジュール名token
. このトークン変数はスレーブノード上で実行する必要があるコマンドを含んでいます.ステップ5:Kubernetes奴隷のために書く役割
🔶 以下はK 8 Sスレーブの設定に含まれるステップです.
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 :可読なVaultファイルを書く
🔶 ロールワークスペースに移動
🔶 コマンドを実行し、vaultファイルを作成する
# ansible-vault create <filename>.yml
ansible-vault create cred.yml
🔶 それは1つのVaultパスワードを提供し、お好みに応じて提供するよう求められます.🔶 次に、エディタで開き、2つの変数を作成します
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-playbook setup.yml --ask-vault-pass
🔶 次に、それはあなたのANVERSAVOLE(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
この問題について(実現可能な自動化を用いた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