DEVOPSプロジェクト- CI/CDジェンキンズ

13678 ワード

オークのKubernetes




                                               Dockerhub 
                                              /        \
                                            /            \                          
                                      Push/Image       Pull\Image        
                                        /                    \
      Pull Code       Copy Artifacts  /     Deploy Container   \
Github--------->Jenkin-------------->Ansible--------------->Kubernetes         |
                    |  
                    | Build Code
                   \|/
                  Maven  


セットアップKubernetesアマゾンアマゾンで
あなたは公式AWSドキュメントで同じ手順に従うことができますGetting started with Amazon EKS – eksctl
前もって
  • EC 2インスタンス
  • Awscli最新版をインストール
  • セットアップ
  • ダウンロードKubectlバージョン1.21
  • 実行可能な許可
  • kubectlを/usr/local/binに移動する
  • Kubectlのインストールが成功したことをテストします
  •    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
       chmod +x ./kubectl
       mv ./kubectl /usr/local/bin 
       kubectl version --short --client      
    
    セットアップ
  • 最新リリースをダウンロードして、抽出してください
  • 抽出したバイナリを/usr/local/binに移動する
  • Ekscltインストールが成功したことをテストします
  •    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
       sudo mv /tmp/eksctl /usr/local/bin
       eksctl version
    
    IAMロールを作成し、EC 2インスタンスにそれを添付しますNote: create IAM user with programmatic access if your bootstrap system is outside of AWSIAMのユーザにアクセスする必要があります
    IAM
    EC 2
    雲形成
    注意:Minimum IAM policies
    クラスタとノードの作成
       eksctl create cluster --name cluster-name  \
       --region region-name \
       --node-type instance-type \
       --nodes-min 2 \
       --nodes-max 2 \ 
       --zones <AZ-1>,<AZ-2>
    
       example:
       eksctl create cluster --name valaxy-cluster \
       --region ap-south-1 \
       --node-type t2.small \
    
    EKS clsuterを削除するには
       eksctl delete cluster cluster-name --region ap-south-1
    
    ノードをチェックして、podを作成することで、クラスタを検証します
       kubectl get nodes
       kubectl run tomcat --image=tomcat 
    
    KinbernetesにNGinxポッドを配備すること
    Nginxコンテナの配備
        kubectl create deployment  demo-nginx --image=nginx --replicas=2 --port=80
        # kubectl deployment regapp --image=valaxy/regapp --replicas=2 --port=8080
        kubectl get all
        kubectl get pod
    
    配備をサービスとして公開します.これは、それらの2つのコンテナの前でELBをつくって、私たちに公的に彼らにアクセスするのを許します.
       kubectl expose deployment demo-nginx --port=80 --type=LoadBalancer
       # kubectl expose deployment regapp --port=8080 --type=LoadBalancer
       kubectl get services -o wide
    
    マニフェストファイルを使用したPODとサービスの作成
    マニフェストファイル
    sudo su -
    vim pod.yml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-pod
      labels: 
        app: demo-app
    
    spec:
      containers: 
        - name: demo-nginx
          image: nginx
          ports:
            - name: demo-nginx
              containerPort: 80
    
    サービスマニフェストファイル
    vim service.yml
    
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      labels: 
        app: demo-app
    
    spec:
      ports:
      - name: nginx-port
        port: 80
        targetPort: 80
      selector:
        app: demo-app
      type: LoadBalancer
    
    を実行する
    kubectl apply -f pod.yml
    kubectl get pod
    
    kubectl apply -f service.yml
    kubectl get service
    
    kubectl get all
    kubectl get pods -o wide
    kubectl get services -o wide
    kubectl describe pod podname
    kubectl describe service servicename
    
    セットアップポッドとサービス
                              selector:                labels:
                                app: demo-app            app: demo-app
    External network-------------->Service------------------->Pod
    
    として我々はそれがセレクタアプリを探してサービスを外部ネットワークからの要求を送信するときに我々は多くのポッドがあることを知っている:アプリとラベルアプリを持っているポッドにrequsetを転送:デモアプリ.それが、サービスマニフェストファイルとPodマニフェストファイルのラベルでセレクタを使用する理由です.

    CI/CDパイプラインにおけるKubernetesの統合


    マニフェストファイルを使用した展開とサービスの作成
    展開マニフェストファイル
    sudo su -
    vim deployment.yml
    
    apiVersion: v1
    kind: Deployment
    metadata:                        --->Deployment name and label
      name: demo-webapp 
      labels: 
        app: webapp
    
    spec:
      replicas: 2
      selector:                      --->Create 2 pods from pod template
        matchLabels:
           app: webapp
    
    template:                                                    |
        metadata:                    ---> pod definition         |        
          labels:                                                |       
            app: webapp                                          |
                                                                 |           
        spec: containers                                         |---> Template to create a pod                                     |
        - name: webapp                                           |
          image: nithinalias/mytomcat ---> container definition  |
          imagePullPolicy: Always                                |
          ports:                                                 |
          - containerPort: 8080                                  |   
    
    strategy:
      type: RollingUpdate
      rollingUpdate:                 --->make sure only one pod updated at a time
        maxSugre: 1
        maxUnavialable: 1
    
    サービスマニフェストファイル
    vim service.yml
    
    apiVersion: v1
    kind: Service                    ---> Resource Type
    
    metadata:
      name: demo-service             ---> service name and label
      labels: 
        app: webapp
    
    spec:
      ports:
      - name: nginx-port
        port: 8080                   ---> port number exposed at cluster level
        targetPort: 8080             ---> port that container listening
    
      selector:                      ---> To which deployment it can send traffic
        app: webapp
      type: LoadBalancer             ---> service type          
    
    labels in deployment manifest file need to match with selector in service manifest file.containerPort in deployment manifest file need to match with targetPort in service manifest file.配備とサービスの実行
    kubectl apply -f deployment.yml
    kubectl get pod
    
    kubectl apply -f service.yml
    kubectl get service
    
    kubectl get all
    kubectl get pods -o wide
    kubectl get services -o wide
    kubectl describe pod podname
    kubectl describe service servicename
    
    ユーザーを作成し、パスワード認証を許可します.
    sudo su -
    adduser ansadmin
    id ansadmin
    
    vim /etc/ssh/sshd_config
    
    PasswordAuthentication yes
    #PasswordAuthentication no
    
    systemctl restart ssh
    
    作成されたユーザーのVisudoを変更します.
    vim /etc/sudoers
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ansadmin ALL=(ALL:ALL) NOPASSWD: ALL
    
    ユーザ権限行
    root ALL=(ALL:ALL) ALL The first field indicates the username that the rule will apply to (root).
    
    root ALL=(ALL:ALL) ALL The first “ALL” indicates that this rule applies to all hosts.
    
    root ALL=(ALL:ALL) ALL This “ALL” indicates that the root user can run commands as all users.
    
    root ALL=(ALL:ALL) ALL This “ALL” indicates that the root user can 
    run commands as all groups.
    
    root ALL=(ALL:ALL) ALL The last “ALL” indicates these rules apply to all commands.
    
    sshキーを生成します.
    su - ansadmin
    ssh-keygen
    
    Dockerマシンに行き、ユーザーを作成し、グループDocker、Dockerに追加します.すべてのユーザへのアクセス許可
    sudo su -
    adduser ansadmin
    usermod -aG docker ansadmin
    id ansadmin
    chmod 777 /var/run/docker.sock
    systemctl restart docker
    docker login
    
    パスワード認証を許可します.
    vim /etc/ssh/sshd_config
    
    PasswordAuthentication yes
    #PasswordAuthentication no
    
    systemctl restart ssh
    
    作成されたユーザーのVisudoを変更します.
    vim /etc/sudoers
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ansadmin ALL=(ALL:ALL) NOPASSWD: ALL
    
    わかりやすいマシンに行って、Dockerマシンと可用性のマシンのIPアドレスを追加します.
    vim /etc/ansible/hosts
    
    [docker]
    192.168.33.20
    [ansible]
    192.168.33.25
    
    SSH公開鍵をDockerマシンと可用性マシンそのものにコピーします.
    su - ansadmin
    ssh-copy-id ansadmin@ip-of-ansiblemachine
    ssh-copy-id ansadmin@ip-of-dockermachine
    ansible all -m ping
    
    現在、許可されたキーは/home/ansadmin/に生成されます.Dockerと認証マシンのSSH/AuthorizedKeyキー.
    ディレクトリを作成して、Ansadminの所有権を与えてください.すべてのユーザへのアクセス許可.
    sudo su -
    mkdir /opt/docker
    chown ansadmin:ansadmin /opt/docker
    usermod -aG docker ansadmin
    id ansadmin
    chmod 777 /var/run/docker.sock
    systemctl restart docker
    su - ansadmin
    docker login
    
    Tomcatイメージ作成用のDockerFileを作成します.
    vim /opt/docker/dockerfile
    
    FROM tomcat
    RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
    COPY ./*.war /usr/local/tomcat/webapps
    
    Tomcatイメージを構築するためのanplayplayを生成します.
    vim /opt/docker/build_tomcatimage.yml
    
    ---
    
    - hosts: ansible
    
      tasks:
      - name: create docker image
        command: docker build -t mytomcat .
        args:
         chdir: /opt/docker
    
      - name: create tag to push image onto dockerhub
        command: docker tag mytomcat nithinalias/mytomcat
    
      - name: push docker image
        command: docker push nithinalias/mytomcat
    
    
    生成Tomcatのための可読性プレイブックを生成します.
    vim /opt/docker/deploy_tomcat.yml
    
    ---
    - hosts: docker
    
      tasks:
      - name: stop existing container
        command: docker stop tomcat-container
        ignore_errors: yes
    
      - name: remove the container
        command: docker rm tomcat-container
        ignore_errors: yes
    
      - name: remove image
        command: docker rmi nitinalias/mytomcat
        ignore_errors: yes
    
      - name: create container
        command: docker run -d --name tomcat-container -p 8082:8080 nithinalias/mytomcat
    
    
    # If there is no container it will show error.To avoid this we use ignore errors: yes
    ~
    
    
    統合可能なジェンキンズ
    既にSSHプラグインをインストールしてDockerAdminを追加しました
    Dockerマシンのssh接続.現在、我々はAnsadminを加える必要があります
    可用性のあるマシンのSSH接続.
    管理Jenkins -設定システム- sshのサーバー-追加-名前(使用可能なサーバー)、ホスト名
    ( ANSADMIN )- Advanced - use password認証を有効にするか、別のキーを使用します-ユーザansadminのパスワードを追加します(代わりにssh key/ssh keyのパスを使うことができます).
    新しい項目-項目名を追加します(ビルドされた機能を有効にする)を選択します.ブランチ-ビルドトリガ(poll scm = ****はリポジトリをチェックします、そして、どんな更新があれば、ビルドをトリガします-ビルドは定期的にリポジトリが更新されていなくてもビルドをトリガーすることを意味します)-ビルド(ルートpom = pom . xml、目標とオプション= clean install)を追加します.SourceFile ( WebApp/target/*. war )を追加し、remove prefix ( webapp/target )を追加し、リモートディレクトリを追加します"/opt//docker "(空白の場合は/home/ansadminになります).
    Execコマンド= "ANPLAY PLAYBOOK/opt/Docker/buildLow Tomcatimage . yml ;
    睡眠10
    わかりやすい脚本/opt/Docker/DeployCloud Tomcat.yl "- save - build - now - console output .すべてのビルド結果を/var/lib/jenkins/workspace/buildに展開します.
    Webアプリケーション/ターゲット.SureFireは、ビルドとWebアプリのレポートが含まれています.戦争はアーティファクトと呼ばれる.このwebapp.戦争は不安定なマシン/opt/Dockerディレクトリにあり、Tomcatイメージにコピーします.可用性のマシンの内部で作成されたイメージはDockerHubにプッシュされます.DockerHookからこのイメージを引いて、DocCARコンテナをDocker内部に作成します
    マシン.
    今すぐ閲覧することができますhttp://ip-adress:8082/webapp/ Note: To check ansible-playbook and run ansible-playbook on particular host you can use the command shown below.
    ansible-playbook /opt/docker/deploy_tomcat.yml --check
    ansible-playbook /opt/docker/deploy_tomcat.yml --limit ip-
    adress/groupname 
    
    Source: https://github.com/yankils