実現可能な自動化を用いたAWS上の多ノードKubernetesクラスタの展開



米国特許
  • 3 AWS EC 2インスタンスを起動するには、再生可能な脚本を作成します
  • それらのインスタンスの上でDockerを構成するために、anplayableな脚本をつくってください
  • K 8 Sマスターを構成するためにPlaybookを作成してください

  • 必要条件: ( RHER - 8用)
  • コントローラノードは、コントローラノードが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つの異なるロールを作成するコマンドを使用します
  • Kubernetesクラスタのために
  • Kubernetesマスターのために
  • Kubernetes奴隷のために
  • # 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 called ec2 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 and secret key are stored inside vault 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マスターを構成するための役割を含めなければならないステップです
  • DockerとIproute TCのインストール
  • KumbernetesのためのYumレポの設定
  • Kubeadm , Kubelet & Kubectlプログラムのインストール
  • DockerとKubernetesを有効にする
  • 設定画像の取り込み
  • Dockerデーモンの設定JSONファイル
  • Dockerサービスの再起動
  • IPテーブルの設定とsysctlのリフレッシュ
  • Kubeadmサービスの開始
  • ホームディレクトリの設定.神戸ディレクトリ
  • ファイルのコピー
  • アドオンをインストールする
  • トークンの作成
  • ファイル内のトークンの出力を格納します.
  • 🔶 タスクフォルダ内に移動します.我々は、このフォルダの中に全体のタスクを書かなければなりません
    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コマンドを実行するモジュール.
  • 私たちはDockerのデフォルトのcgroupsystemd , さもなければKubeadmはK 8 sクラスタを設定できません.初めて使うcopy モジュールを作成します/etc/docker/daemon.json & いくつかのコンテンツを入れます.
  • 次の使用command モジュールをクラスタ化してからshell モジュールの設定kubectl マスターノードのコマンド.
  • 次の使用command モジュールの配備Flannel Koubernetesクラスタでオーバーレイネットワーク設定を作成します.
  • 2番目command モジュールを使用して、スレーブノードがクラスタに結合するトークンを取得します.
  • 使用register 2番目の出力を保存しましたcommand モジュール名token . このトークン変数はスレーブノード上で実行する必要があるコマンドを含んでいます.

  • ステップ5:Kubernetes奴隷のために書く役割
    🔶 以下はK 8 Sスレーブの設定に含まれるステップです.
  • DockerとIproute TCのインストール
  • KumbernetesのためのYumレポの設定
  • Kubeadmのインストール
  • DockerとKubernetesを有効にする
  • 設定画像の取り込み
  • Dockerデーモンの設定JSONファイル
  • Dockerサービスの再起動
  • IPテーブルの設定とsysctlのリフレッシュ
  • マスターを構成している間、我々が保存するjoinコマンドをコピーしてください
  • 🔶 タスクフォルダ内に移動します.我々は、このフォルダの中に全体のタスクを書かなければなりません
    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 and role 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プロファイル