DEVOPSプロジェクト- CI/CDジェンキンズ
13678 ワード
オークのKubernetes
あなたは公式AWSドキュメントで同じ手順に従うことができますGetting started with Amazon EKS – eksctl
前もって EC 2インスタンス Awscli最新版をインストール セットアップ ダウンロードKubectlバージョン1.21
実行可能な許可
kubectlを/usr/local/binに移動する
Kubectlのインストールが成功したことをテストします
最新リリースをダウンロードして、抽出してください
抽出したバイナリを/usr/local/binに移動する
Ekscltインストールが成功したことをテストします
IAM
EC 2
雲形成
注意:Minimum IAM policies
クラスタとノードの作成
Nginxコンテナの配備
マニフェストファイル
マニフェストファイルを使用した展開とサービスの作成
展開マニフェストファイル
ディレクトリを作成して、Ansadminの所有権を与えてください.すべてのユーザへのアクセス許可.
既に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/
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
前もって
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
セットアップ 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 AWS
IAMのユーザにアクセスする必要があります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/yankilsReference
この問題について(DEVOPSプロジェクト- CI/CDジェンキンズ), 我々は、より多くの情報をここで見つけました https://dev.to/nithinalias/devops-project-cicd-jenkins-ansible-kubernetes-6ljテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol