環境設定の概要親愛なる家族の皆様、必要な yaml ファイルをダウンロードするには、次のリンクにアクセスしてください: http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar。 1.K8Sとは何ですか?K8S は Kubernetes の略で、コンテナ テクノロジーをベースとした新しい主要な分散アーキテクチャ ソリューションです。コンテナ テクノロジーをベースとして、リソース管理を自動化し、複数のデータ センターにわたるリソース使用率を最大化することを目的としています。 システム設計がKubernetesの設計思想に沿っていれば、従来のシステムアーキテクチャにおける、業務とはあまり関係のない基盤コードや機能モジュールをK8Sで管理できます。負荷分散の選択や展開を気にする必要がなくなり、複雑なサービスガバナンスフレームワークの導入や開発を自ら検討する必要もなくなり、サービス監視や障害処理モジュールの開発を気にする必要もなくなります。つまり、Kubernetes が提供するソリューションを使用すると、開発コストが大幅に削減され、ビジネス自体にさらに集中できるようになります。さらに、Kubernetes は強力な自動化メカニズムを提供するため、後続のシステム運用と保守の難易度とコストが大幅に軽減されます。 2. K8S を使用する理由新興のコンテナ技術である Docker は、多くの企業に導入されています。単一マシンからクラスターへの移行は避けられず、クラウド コンピューティングの急速な発展により、このプロセスが加速しています。 Kubernetes は現在、業界で広く認知され、好まれている唯一の Docker 分散システム ソリューションです。今後数年間で、企業のローカル サーバーで実行されるか、パブリック クラウドでホストされるかに関係なく、多数の新しいシステムがこれを選択することが予測されます。 3. K8S を使用する利点は何ですか?Kubernetes の使用は、マイクロサービス アーキテクチャの包括的な展開です。マイクロサービス アーキテクチャの中核は、巨大なモノリシック アプリケーションを多数の相互接続された小さなマイクロサービスに分解することです。マイクロサービスは複数のインスタンス コピーによってサポートされ、システム負荷の変化に応じてコピー数を調整できます。組み込みロード バランサは、k8s プラットフォーム内の複数のインスタンス コピーによってサポートされ、システム負荷の変化に応じてコピー数を調整できます。組み込みロード バランサは、k8s プラットフォームで重要な役割を果たします。マイクロサービス アーキテクチャでは、各サービスを専用の開発チームで開発することができ、開発者は開発テクノロジを自由に選択できるため、大規模なチームにとって非常に価値があります。さらに、各マイクロサービスは独立して開発、アップグレード、拡張されるため、システムは非常に安定し、迅速な反復的な進化が可能になります。 4. 環境構成環境全体の構築には、Docker 環境の構築、docker-compose 環境の構築、K8S クラスターの構築、GitLab コード リポジトリの構築、SVN リポジトリの構築、Jenkins 自動デプロイメント環境の構築、Harbor プライベート リポジトリの構築が含まれます。 このドキュメントでは、環境全体の構築には以下が含まれます。
サーバー計画 |
IP | ホスト名 | ノード | オペレーティング·システム |
---|---|---|---|
192.168.0.10 | テスト10 | K8Sマスター | セントOS8.0.1905 |
192.168.0.11 | テスト11 | K8Sワーカー | セントOS8.0.1905 |
192.168.0.12 | テスト12 | K8Sワーカー | セントOS8.0.1905 |
設置環境
ソフトウェアタイトル | ソフトウェアバージョン | 例示する |
---|---|---|
ドッカー | 19.03.8 | コンテナ環境の提供 |
docker-compose | 1.25.5 | 複数のコンテナで構成されるアプリケーションを定義および実行する |
K8S | 1.18.2 | Kubernetes は、複数のホストに対応したオープンソースのコンテナ化されたアプリケーション管理プラットフォームです。Kubernetes の目標は、コンテナ化されたアプリケーションの展開をシンプルかつ強力にすることです。Kubernetes は、アプリケーションの展開、計画、更新、およびメンテナンスのメカニズムを提供します。 |
ギットラボ | 12.1.6 | コードリポジトリ |
港 | 1.10.2 | プライベート画像リポジトリ |
ジェンキンス | 2.222.3 | 継続的インテグレーションデリバリー |
Docker は、Go 言語をベースにしたオープンソースのアプリケーション コンテナ エンジンであり、Apache 2.0 プロトコルに準拠したオープンソースです。
Docker を使用すると、開発者はアプリケーションと依存パッケージを軽量でポータブルなコンテナーにパッケージ化し、一般的な Linux マシンに公開したり、仮想化を実装したりすることができます。
このドキュメントでは、Docker バージョン 19.03.8 に基づいて Docker 環境を構築します。
すべてのサーバーに install_docker.sh スクリプトを作成します。スクリプトの内容は次のとおりです。
# Alibaba Cloud Mirror Center を使用します export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com #yumツールをインストールします dnf install yum* #docker環境をインストールします yum install -y yum-utils device-mapper-persistent-data lvm2 #Docker の yum を設定します。source yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #コンテナプラグインをインストールします dnf install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm #docker バージョン 19.03.8 のインストールを指定します yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 #Docker を起動するように設定する systemctl enable docker.service #Dockerを起動する systemctl で docker.service を起動します。 #Dockerのバージョンを確認するdocker version
各サーバー上の install_docker.sh スクリプトに実行権限を与え、以下のようにスクリプトを実行します。
#install_docker.sh スクリプトに実行権限を付与します chmod a+x ./install_docker.sh # install_docker.sh スクリプトを実行します ./install_docker.sh
Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。 Compose では、YML ファイルを使用して、アプリケーションに必要なすべてのサービスを構成します。その後、1 つのコマンドで、YML ファイル構成からすべてのサービスを作成して起動できます。
注: 各サーバーにdocker-composeをインストールします
#docker-composeをダウンロードしてインストールする curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#docker-compose に実行権限を与える chmod a+x /usr/local/bin/docker-compose
# docker-compose バージョンを表示 [root@binghe ~]# docker-compose バージョン docker-compose バージョン 1.25.5、ビルド 8a1c60f6 docker-py バージョン: 4.1.0 CPython バージョン: 3.7.5 OpenSSL バージョン: OpenSSL 1.1.0l 2019 年 9 月 10 日
Kubernetes は、クラウド プラットフォーム内の複数のホスト上のコンテナ化されたアプリケーションを管理するためのオープン ソース プラットフォームです。Kubernetes の目標は、コンテナ化されたアプリケーションの展開をシンプルかつ強力にすることです。Kubernetes は、アプリケーションの展開、計画、更新、およびメンテナンスのメカニズムを提供します。
このドキュメントはK8Sクラスタを構築するためのK8Sバージョン1.8.12に基づいています
すべてのサーバーにinstall_k8s.shスクリプトファイルを作成します。スクリプトファイルの内容は次のとおりです。
################### Alibaba Cloud Image Accelerator の開始を構成する########################## mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "レジストリミラー": ["https://zz3sblpi.mirror.aliyuncs.com"] } 終了 systemctlデーモンリロード systemctl dockerを再起動します ######################## Alibaba Cloud Mirror Accelerator の設定終了########################### #nfs-utilsをインストールする yum インストール -y nfs-utils #wgetソフトウェアダウンロードコマンドをインストールyum install -y wget #nfs-serverを起動する systemctl nfs-serverを起動する #起動時にnfs-serverが自動的に起動するように設定する systemctl enable nfs-server #ファイアウォールをシャットダウンする systemctl stop firewalld #ファイアウォールの起動をキャンセルする systemctl enable firewalld #SeLinuxを無効にする 強制0を設定する sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # スワップを無効にする スワップオフ -a はい | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab ###############################/etc/sysctl.conf を変更して起動します############################## # 設定がある場合は、sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf を変更します sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf # そうでないかもしれません。echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf を追加してください。 echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf エコー "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf エコー "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf エコー "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf エコー "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf ###############################/etc/sysctl.conf を変更します終了############################### # 変更した/etc/sysctl.confファイルを有効にするコマンドを実行します。sysctl -p #################### K8S の yum ソースの設定を開始します############################### cat <<EOF > /etc/yum.repos.d/kubernetes.repo [Kubernetes] 名前=Kubernetes ベースURL=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 有効=1 gpgcheck=0 リポジトリ_gpgcheck=0 gpgkey = http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 終了 ################### K8S の yum ソースの設定はこれで終了です############################# # K8Sの古いバージョンをアンインストールする yum 削除 -y kubelet kubeadm kubectl #kubelet、kubeadm、kubectl をインストールします。ここではバージョン 1.18.2 をインストールしました。バージョン 1.17.2 をインストールすることもできます。yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2 # docker Cgroup ドライバーを systemd に変更する # # /usr/lib/systemd/system/docker.service ファイルのこの行を変更します ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock # # ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd に変更します # 変更しないと、ワーカー ノードを追加するときに次のエラーが発生する可能性があります。 # [警告 IsDockerSystemdCheck]: Docker cgroup ドライバーとして「cgroupfs」が検出されました。推奨されるドライバーは「systemd」です。 # https://kubernetes.io/docs/setup/cri/ のガイドに従ってください。 sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service # docker イメージのダウンロード速度と安定性を向上させるために、docker イメージを設定します # https://hub.docker.io へのアクセス速度が非常に安定している場合は、この手順をスキップすることもできます。通常、設定は必要ありません # curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR} # 設定ファイルをリロードする systemctl daemon-reload #Dockerを再起動 systemctl dockerを再起動します # 起動時にkubeletを起動するように設定し、kubeletを起動します systemctl kubelet を有効にする && systemctl kubelet を開始する # dockerのバージョンを表示する
各サーバーのinstall_k8s.shスクリプトに実行権限を付与し、スクリプトを実行します。
#install_k8s.sh スクリプトに実行権限を付与します chmod a+x ./install_k8s.sh # install_k8s.sh スクリプトを実行します ./install_k8s.sh
操作は test10 サーバー上でのみ実行されます。
注意: 次のコマンドはコマンド ラインで手動で実行する必要があります。
# マスターノードでのみ実行します # エクスポートコマンドは現在のシェルセッションでのみ有効です。新しいシェルウィンドウを開いた後、インストールプロセスを続行する場合は、ここでエクスポートコマンドを再実行してください export MASTER_IP=192.168.0.10 # k8s.masterを希望のdnsNameに置き換えます APISERVER_NAME=k8s.master をエクスポートします。 # Kubernetes コンテナ グループが配置されているネットワーク セグメント。このネットワーク セグメントは、インストール後に Kubernetes によって作成され、物理ネットワークには事前に存在しません。export POD_SUBNET=172.18.0.1/16 echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
test10 サーバーに init_master.sh スクリプト ファイルを作成します。ファイルの内容は次のとおりです。
#!/bin/bash # エラーが発生したらスクリプトを終了する set -e [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]の場合; echo -e "\033[31;1m環境変数POD_SUBNETとAPISERVER_NAMEが設定されていることを確認してください\033[0m" 現在の POD_SUBNET=$POD_SUBNET をエコーします 現在の APISERVER_NAME=$APISERVER_NAME をエコーします 出口1 フィ # 完全な構成オプションを見る https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 rm -f ./kubeadm-config.yaml 猫 <<EOF > ./kubeadm-config.yaml APIバージョン: kubeadm.k8s.io/v1beta2 種類: ClusterConfiguration kubernetesバージョン: v1.18.2 イメージリポジトリ: registry.cn-hangzhou.aliyuncs.com/google_containers コントロールプレーンエンドポイント: "${APISERVER_NAME}:6443" ネットワーキング: サービスサブネット: "10.96.0.0/16" ポッドサブネット: "${POD_SUBNET}" dnsDomain: "cluster.local" 終了 # kubeadm を初期化する # kebeadmを初期化する kubeadm init --config=kubeadm-config.yaml --upload-certs # kubectl を設定する rm -rf /root/.kube/ mkdir /root/.kube/ cp -i /etc/kubernetes/admin.conf /root/.kube/config # calico ネットワーク プラグインをインストールします # ドキュメントを参照してください https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onmises echo "calico-3.13.1 をインストール" rm -f カリコ-3.13.1.yaml https://kuboard.cn/install-script/calico/calico-3.13.1.yaml を取得します。 kubectl を適用 -f calico-3.13.1.yaml
init_master.sh スクリプト ファイルに実行権限を付与し、スクリプトを実行します。
# init_master.sh ファイルに実行権限を付与します chmod a+x ./init_master.sh # init_master.sh スクリプトを実行します。/init_master.sh
(1)すべてのコンテナグループが実行状態であることを確認する
# 次のコマンドを実行し、すべてのコンテナグループが実行状態になるまで3〜10分待ちます。watch kubectl get pod -n kube-system -o wide
具体的な実装は以下のとおりです。
[root@test10 ~]# kubectl get pod -n kube-system -o wide を監視する 2.0 秒ごとに: kubectl get pod -n kube-system -o wide test10: 2020 年 5 月 10 日日曜日 11:01:32 名前 準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート calico-kube-controllers-5b8b769fcd-5dtlp 1/1 実行中 0 118s 172.18.203.66 test10 <なし> <なし> calico-node-fnv8g 1/1 実行中 0 118s 192.168.0.10 test10 <なし> <なし> coredns-546565776c-27t7h 1/1 実行中 0 2分1秒 172.18.203.67 test10 <なし> <なし> coredns-546565776c-hjb8z 1/1 実行中 0 2分1秒 172.18.203.65 test10 <なし> <なし> etcd-test10 1/1 実行中 0 2分7秒 192.168.0.10 test10 <なし> <なし> kube-apiserver-test10 1/1 実行中 0 2分7秒 192.168.0.10 test10 <なし> <なし> kube-controller-manager-test10 1/1 実行中 0 2分7秒 192.168.0.10 test10 <なし> <なし> kube-proxy-dvgsr 1/1 実行中 0 2分1秒 192.168.0.10 test10 <なし> <なし> kube-scheduler-test10 1/1 実行中 0 2分7秒 192.168.0.10 test10 <なし>
(2)マスターノードの初期化結果を表示する
# マスターノードの初期化結果を表示する kubectl get nodes -o wide
具体的な実装は以下のとおりです。
[root@test10 ~]# kubectl get nodes -o wide 名前 ステータス 役割 年齢 バージョン 内部 IP 外部 IP OS イメージ カーネル バージョン コンテナ ランタイム test10 マスター準備完了 3m28s v1.18.2 192.168.0.10 <なし> CentOS Linux 8 (Core) 4.18.0-80.el8.x86_64 docker://19.3.8
マスターノード (test10 サーバー) で次のコマンドを実行して、参加コマンドのパラメータを取得します。
kubeadm トークン作成 --print-join-command
具体的な実装は以下のとおりです。
[root@test10 ~]# kubeadm トークン作成 --print-join-command W0510 11:04:34.828126 56132 configset.go:202] 警告: kubeadm は API グループのコンポーネント構成を検証できません [kubelet.config.k8s.io kubeproxy.config.k8s.io] kubeadm は k8s.master:6443 に参加します --token 8nblts.62xytoqufwsqzko2 --discovery-token-ca-cert-hash sha256:1717cc3e34f6a56b642b5751796530e367aa73f4113d09994ac3455e33047c0d
その中に、次の出力行があります。
kubeadm は k8s.master:6443 に参加します --token 8nblts.62xytoqufwsqzko2 --discovery-token-ca-cert-hash sha256:1717cc3e34f6a56b642b5751796530e367aa73f4113d09994ac3455e33047c0d
このコード行は取得された結合コマンドです。
注: join コマンドのトークンは 2 時間有効です。2 時間以内であれば、このトークンを使用して任意の数のワーカー ノードを初期化できます。
すべてのワーカーノードで実行します。ここでは、test11 サーバーと test12 サーバーで実行されます。
コマンドラインで次のコマンドを手動で実行します。
# ワーカーノードでのみ実行されます # 192.168.0.10 はマスターノードのイントラネット IP です エクスポート MASTER_IP=192.168.0.10 #k8s.masterをマスターノードの初期化時に使用したAPISERVER_NAMEに置き換えます APISERVER_NAME=k8s.master をエクスポートします。 echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts # マスターノード上のkubeadm token createコマンドのjoin出力に置き換えます kubeadm は k8s.master:6443 に参加します --token 8nblts.62xytoqufwsqzko2 --discovery-token-ca-cert-hash sha256:1717cc3e34f6a56b642b5751796530e367aa73f4113d09994ac3455e33047c0d
具体的な実装は以下のとおりです。
[root@test11 ~]# エクスポート MASTER_IP=192.168.0.10 [root@test11 ~]# APISERVER_NAME=k8s.master をエクスポートします [root@test11 ~]# echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts [root@test11 ~]# kubeadm join k8s.master:6443 --token 8nblts.62xytoqufwsqzko2 --discovery-token-ca-cert-hash sha256:1717cc3e34f6a56b642b5751796530e367aa73f4113d09994ac3455e33047c0d W0510 11:08:27.709263 42795 join.go:346] [preflight] 警告: コントロール プレーン フラグが設定されていない場合、JoinControlPane.controlPlane 設定は無視されます。 [プリフライト] プリフライトチェックの実行 [警告 FileExisting-tc]: tc がシステム パスに見つかりません [プリフライト] クラスターから構成を読み取っています... [プリフライト] 参考までに: この設定ファイルは 'kubectl -n kube-system get cm kubeadm-config -oyaml' で確認できます。 [kubelet-start] kube-system 名前空間の "kubelet-config-1.18" ConfigMap から kubelet の設定をダウンロードしています [kubelet-start] kubelet 設定をファイル "/var/lib/kubelet/config.yaml" に書き込みます [kubelet-start] フラグ付きの kubelet 環境ファイルをファイル "/var/lib/kubelet/kubeadm-flags.env" に書き込みます [kubelet-start] kubeletの起動 [kubelet-start] kubelet が TLS ブートストラップを実行するのを待機しています... このノードはクラスターに参加しました: * 証明書署名要求が apiserver に送信され、応答が受信されました。 * Kubelet に新しい安全な接続の詳細が通知されました。 コントロール プレーンで「kubectl get nodes」を実行して、このノードがクラスターに参加していることを確認します。
出力結果によると、ワーカーノードは K8S クラスターに参加しています。
注: kubeadm join… は、マスター ノード上の kubeadm token create コマンドによる join 出力です。
初期化結果を表示するには、マスターノード (test10 サーバー) で次のコマンドを実行します。
kubectl ノードを取得 -o ワイド
具体的な実装は以下のとおりです。
[root@test10 ~]# kubectl ノードを取得する 名前 ステータス 役割 年齢 バージョン test10 レディマスター 20m v1.18.2 test11 準備完了 <なし> 2分46秒 v1.18.2 test12 準備完了 <なし> 2分46秒 v1.18.2
注: kubectl get nodes コマンドの後に -o wide パラメータを追加すると、より多くの情報が出力されます。
マスターノードの IP アドレスが変更され、ワーカーノードの起動に失敗します。 K8S クラスターを再インストールし、すべてのノードに固定のイントラネット IP アドレスがあることを確認する必要があります。
サーバーを再起動した後、次のコマンドを使用して Pod の実行ステータスを確認します。
#すべてのポッドの実行ステータスを表示する kubectl get pods --all-namespaces
多くの Pod が実行状態ではないことがわかりました。この時点で、次のコマンドを使用して、正常に実行されていない Pod を削除する必要があります。
kubectl delete pod <ポッド名> -n <ポッド名固有>
注: Deployment や StatefulSet などのコントローラーを使用して Pod が作成された場合、K8S は代わりに新しい Pod を作成し、再起動された Pod は通常は正常に動作します。
このうち、pod-name は K8S で実行されているポッドの名前を示し、pod-namespece は名前空間を示します。たとえば、ポッド名が pod-test で名前空間が pod-test-namespace のポッドを削除する必要がある場合は、次のコマンドを使用できます。
kubectl ポッドを削除します。pod-test -n ポッドテスト名前空間
リバースプロキシとして、外部トラフィックをクラスター内にインポートし、Kubernetes 内の Service を外部に公開し、Ingress オブジェクト内のドメイン名で Service を照合することで、ドメイン名でクラスター内のサービスに直接アクセスできるようになります。 traefik と比較すると、nginx-ingress の方がパフォーマンスが優れています。
注: マスターノード(test10サーバーで実行)
ingress-nginx-namespace.yaml ファイルを作成します。主な機能は、ingress-nginx 名前空間を作成することです。ファイルの内容は次のとおりです。
APIバージョン: v1 種類: 名前空間 メタデータ: 名前: ingress-nginx ラベル: 名前: ingress-nginx
次のコマンドを実行して、ingress-nginx 名前空間を作成します。
kubectl を適用 -f ingress-nginx-namespace.yaml
ingress-nginx-mandatory.yaml ファイルを作成します。このファイルの主な機能は、ingress-nginx をインストールすることです。ファイルの内容は次のとおりです。
APIバージョン: v1 種類: 名前空間 メタデータ: 名前: ingress-nginx --- APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前: default-http-backend ラベル: app.kubernetes.io/名前: デフォルトのhttp-backend app.kubernetes.io/一部: ingress-nginx 名前空間: ingress-nginx 仕様: レプリカ: 1 セレクタ: 一致ラベル: app.kubernetes.io/名前: デフォルトのhttp-backend app.kubernetes.io/一部: ingress-nginx テンプレート: メタデータ: ラベル: app.kubernetes.io/名前: デフォルトのhttp-backend app.kubernetes.io/一部: ingress-nginx 仕様: 終了猶予期間秒数: 60 コンテナ: - 名前: default-http-backend # 以下の条件を満たす限り、どのような画像でも許可されます: # 1. 404ページが / に表示されます # 2. /healthzエンドポイントで200を提供します イメージ: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/defaultbackend-amd64:1.5 ライブネスプローブ: httpGet: パス: /healthz ポート: 8080 スキーム: HTTP 初期遅延秒数: 30 タイムアウト秒数: 5 ポート: - コンテナポート: 8080 リソース: 制限: CPU: 10m メモリ: 20マイル リクエスト: CPU: 10m メモリ: 20マイル --- APIバージョン: v1 種類: サービス メタデータ: 名前: default-http-backend 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: デフォルトのhttp-backend app.kubernetes.io/一部: ingress-nginx 仕様: ポート: - ポート: 80 ターゲットポート: 8080 セレクタ: app.kubernetes.io/名前: デフォルトのhttp-backend app.kubernetes.io/一部: ingress-nginx --- 種類: ConfigMap APIバージョン: v1 メタデータ: 名前: nginx-configuration 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx --- 種類: ConfigMap APIバージョン: v1 メタデータ: 名前: tcp-services 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx --- 種類: ConfigMap APIバージョン: v1 メタデータ: 名前: udp-services 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx --- APIバージョン: v1 種類: サービスアカウント メタデータ: 名前: nginx-ingress-serviceaccount 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx --- APIバージョン: rbac.authorization.k8s.io/v1beta1 種類: ClusterRole メタデータ: 名前: nginx-ingress-clusterrole ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx ルール: -apiグループ: - 「」 リソース: - 構成マップ - エンドポイント - ノード - ポッド - 秘密 動詞: - リスト - 時計 -apiグループ: - 「」 リソース: - ノード 動詞: - 得る -apiグループ: - 「」 リソース: - サービス 動詞: - 得る - リスト - 時計 -apiグループ: - 「拡張機能」 リソース: - 入口 動詞: - 得る - リスト - 時計 -apiグループ: - 「」 リソース: - イベント 動詞: - 作成する -パッチ -apiグループ: - 「拡張機能」 リソース: - 入力/ステータス 動詞: - アップデート --- APIバージョン: rbac.authorization.k8s.io/v1beta1 種類: 役割 メタデータ: 名前: nginx-ingress-role 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx ルール: -apiグループ: - 「」 リソース: - 構成マップ - ポッド - 秘密 - 名前空間 動詞: - 得る -apiグループ: - 「」 リソース: - 構成マップ リソース名: # デフォルトは「<election-id>-<ingress-class>」 # ここでは: "<ingress-controller-leader>-<nginx>" # いずれかのパラメータを変更する場合はこれを調整する必要があります # nginx-ingress-controller を起動するとき。 - 「イングレス コントローラー リーダー nginx」 動詞: - 得る - アップデート -apiグループ: - 「」 リソース: - 構成マップ 動詞: - 作成する -apiグループ: - 「」 リソース: - エンドポイント 動詞: - 得る --- APIバージョン: rbac.authorization.k8s.io/v1beta1 種類: RoleBinding メタデータ: 名前: nginx-ingress-role-nisa-binding 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx ロールリファレンス: apiグループ: rbac.authorization.k8s.io 種類: 役割 名前: nginx-ingress-role 科目: - 種類: サービスアカウント 名前: nginx-ingress-serviceaccount 名前空間: ingress-nginx --- APIバージョン: rbac.authorization.k8s.io/v1beta1 種類: ClusterRoleBinding メタデータ: 名前: nginx-ingress-clusterrole-nisa-binding ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx ロールリファレンス: apiグループ: rbac.authorization.k8s.io 種類: ClusterRole 名前: nginx-ingress-clusterrole 科目: - 種類: サービスアカウント 名前: nginx-ingress-serviceaccount 名前空間: ingress-nginx --- APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前: nginx-ingress-controller 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx 仕様: レプリカ: 1 セレクタ: 一致ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx テンプレート: メタデータ: ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx 注釈: prometheus.io/ポート: "10254" prometheus.io/scrape: "true" 仕様: サービスアカウント名: nginx-ingress-serviceaccount コンテナ: - 名前: nginx-ingress-controller イメージ: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/nginx-ingress-controller:0.20.0 引数: - /nginx-イングレスコントローラー - --default-backend-service=$(POD_NAMESPACE)/default-http-backend - --configmap=$(POD_NAMESPACE)/nginx-configuration - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services - --udp-services-configmap=$(POD_NAMESPACE)/udp-services - --publish-service=$(POD_NAMESPACE)/ingress-nginx - --annotations-prefix=nginx.ingress.kubernetes.io セキュリティコンテキスト: 機能: 落とす: - 全て 追加: -NET_BIND_SERVICE # wwwデータ -> 33 実行ユーザー: 33 環境: - 名前: POD_NAME 値: フィールド参照: フィールドパス: metadata.name - 名前: POD_NAMESPACE 値: フィールド参照: フィールドパス: metadata.namespace ポート: - 名前: http コンテナポート: 80 - 名前: https コンテナポート: 443 ライブネスプローブ: 失敗しきい値: 3 httpGet: パス: /healthz ポート: 10254 スキーム: HTTP 初期遅延秒数: 10 期間秒数: 10 成功しきい値: 1 タイムアウト秒数: 1 準備プローブ: 失敗しきい値: 3 httpGet: パス: /healthz ポート: 10254 スキーム: HTTP 期間秒数: 10 成功しきい値: 1 タイムアウト秒数: 1 ---
次のコマンドを実行して、イングレス コントローラーをインストールします。
kubectl を適用 -f ingress-nginx-mandatory.yaml
主にポッドを公開するために使用されます: nginx-ingress-controller。
次の内容を含む service-nodeport.yaml ファイルを作成します。
APIバージョン: v1 種類: サービス メタデータ: 名前: ingress-nginx 名前空間: ingress-nginx ラベル: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx 仕様: タイプ: NodePort ポート: - 名前: http ポート: 80 ターゲットポート: 80 プロトコル: TCP ノードポート: 30080 - 名前: https ポート: 443 ターゲットポート: 443 プロトコル: TCP ノードポート: 30443 セレクタ: app.kubernetes.io/名前: ingress-nginx app.kubernetes.io/一部: ingress-nginx
インストールするには、次のコマンドを実行します。
kubectl を適用 -f サービスノードポート.yaml
以下に示すように、ingress-nginx 名前空間のデプロイメントを確認します。
[root@test10 k8s]# kubectl get pod -n ingress-nginx 名前 準備完了 ステータス 再起動 年齢 default-http-backend-796ddcd9b-vfmgn 1/1 実行中 1 10h nginx-ingress-controller-58985cc996-87754 1/1 実行中 2 10 時間
ingress-nginx のポート マッピングを表示するには、コマンド ライン サーバーのコマンド ラインで次のコマンドを入力します。
kubectl get svc -n イングレス-nginx
詳細は以下の通りです。
[root@test10 k8s]# kubectl get svc -n ingress-nginx 名前 タイプ クラスター IP 外部 IP ポート 年齢 デフォルトhttpバックエンド ClusterIP 10.96.247.2 <なし> 80/TCP 7分3秒 ingress-nginx NodePort 10.96.40.6 <なし> 80:30080/TCP、443:30443/TCP 4分35秒
したがって、以下に示すように、マスターノード (test10 サーバー) の IP アドレスとポート番号 30080 を介して ingress-nginx にアクセスできます。
[root@test10 k8s]# カール 192.168.0.10:30080 デフォルトのバックエンド - 404
次に示すように、ブラウザで http://192.168.0.10:30080 を開いて ingress-nginx にアクセスすることもできます。
GitLab は、GitLab Inc. が MIT ライセンスを使用して開発した Web ベースの Git リポジトリ管理ツールであり、Wiki および問題追跡機能を備えています。 Git をコード管理ツールとして使用し、これに基づいて Web サービスを構築します。
注: マスターノード(test10サーバーで実行)
k8s-ops 名前空間を作成するために主に使用される k8s-ops-namespace.yaml ファイルを作成します。ファイルの内容は次のとおりです。
APIバージョン: v1 種類: 名前空間 メタデータ: 名前: k8s-ops ラベル: 名前: k8s-ops
次のコマンドを実行して名前空間を作成します。
kubectl を適用 -f k8s-ops-namespace.yaml
gitlab-redis.yaml ファイルを作成します。ファイルの内容は次のとおりです。
APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前: レディス 名前空間: k8s-ops ラベル: 名前: レディス 仕様: セレクタ: 一致ラベル: 名前: レディス テンプレート: メタデータ: 名前: レディス ラベル: 名前: レディス 仕様: コンテナ: - 名前: redis 画像: sameersbn/redis イメージプルポリシー: IfNotPresent ポート: - 名前: redis コンテナポート: 6379 ボリュームマウント: - マウントパス: /var/lib/redis 名前: データ ライブネスプローブ: 実行: 指示: - redis-cli - ピン 初期遅延秒数: 30 タイムアウト秒数: 5 準備プローブ: 実行: 指示: - redis-cli - ピン 初期遅延秒数: 10 タイムアウト秒数: 5 ボリューム: - 名前: データ ホストパス: パス: /data1/docker/xinsrv/redis --- APIバージョン: v1 種類: サービス メタデータ: 名前: レディス 名前空間: k8s-ops ラベル: 名前: レディス 仕様: ポート: - 名前: redis ポート: 6379 ターゲットポート: redis セレクタ: 名前: レディス
まず、コマンドラインで次のコマンドを実行して、/data1/docker/xinsrv/redis ディレクトリを作成します。
mkdir -p /data1/docker/xinsrv/redis
gitlab-redis をインストールするには、次のコマンドを実行します。
kubectl を適用 -f gitlab-redis.yaml
gitlab-postgresql.yaml を作成します。ファイルの内容は次のようになります。
APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前: postgresql 名前空間: k8s-ops ラベル: 名前: postgresql 仕様: セレクタ: 一致ラベル: 名前: postgresql テンプレート: メタデータ: 名前: postgresql ラベル: 名前: postgresql 仕様: コンテナ: - 名前: postgresql 画像: sameersbn/postgresql イメージプルポリシー: IfNotPresent 環境: - 名前: DB_USER 値: gitlab - 名前: DB_PASS 値: パスワード - 名前: DB_NAME 値: gitlab_production - 名前: DB_EXTENSION 値: pg_trgm ポート: - 名前: postgres コンテナポート: 5432 ボリュームマウント: -マウントパス: /var/lib/postgresql 名前: データ ライブネスプローブ: 実行: 指示: - pg_isready - -h - ローカルホスト - -う - ポストグル 初期遅延秒数: 30 タイムアウト秒数: 5 準備プローブ: 実行: 指示: - pg_isready - -h - ローカルホスト - -う - ポストグレ 初期遅延秒数: 5 タイムアウト秒数: 1 ボリューム: - 名前: データ ホストパス: パス: /data1/docker/xinsrv/postgresql --- APIバージョン: v1 種類: サービス メタデータ: 名前: postgresql 名前空間: k8s-ops ラベル: 名前: postgresql 仕様: ポート: - 名前: postgres ポート: 5432 ターゲットポート: postgres セレクタ: 名前: postgresql
まず、以下のコマンドを実行して、/data1/docker/xinsrv/postgresql ディレクトリを作成します。
mkdir -p /data1/docker/xinsrv/postgresql
次に、以下のようにgitlab-postgresqlをインストールします。
kubectl を適用 -f gitlab-postgresql.yaml
(1)ユーザー名とパスワードを設定する
まず、コマンドラインでユーザー名とパスワードを変換するためにbase64エンコードを使用します。この例では、ユーザー名はadmin、パスワードはadmin.1231です。
トランスコーディングは下記に示します。
[root@test10 k8s]# echo -n 'admin' | base64 YWRtaW4= [root@test10 k8s]# echo -n 'admin.1231' | base64 翻訳:
変換されたユーザー名: YWRtaW4= パスワード: YWRtaW4uMTIzMQ==
次に示すように、パスワード文字列などの base64 でエンコードされた文字列をデコードすることもできます。
[root@test10 k8s]# echo 'YWRtaW4uMTIzMQ==' | base64 --decode 管理者1231
次に、ユーザーが主に GitLab のユーザー名とパスワードを設定するために使用する secret-gitlab.yaml ファイルを作成します。ファイルの内容は次のとおりです。
APIバージョン: v1 種類: 秘密 メタデータ: 名前空間: k8s-ops 名前: git-user-pass タイプ: 不透明 データ: ユーザー名: YWRtaW4= パスワード: YWRtaW4uMTIzMQ==
設定ファイルの内容を以下のように実行します。
kubectl 作成 -f ./secret-gitlab.yaml
(2)GitLabをインストールする
次の内容を含む gitlab.yaml ファイルを作成します。
APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前: gitlab 名前空間: k8s-ops ラベル: 名前: gitlab 仕様: セレクタ: 一致ラベル: 名前: gitlab テンプレート: メタデータ: 名前: gitlab ラベル: 名前: gitlab 仕様: コンテナ: - 名前: gitlab イメージ: sameersbn/gitlab:12.1.6 イメージプルポリシー: IfNotPresent 環境: - 名前: TZ 価値: アジア/上海 - 名前: GITLAB_TIMEZONE 価値: 北京 - 名前: GITLAB_SECRETS_DB_KEY_BASE 値: 長くランダムな英数字の文字列 - 名前: GITLAB_SECRETS_SECRET_KEY_BASE 値: 長くランダムな英数字の文字列 - 名前: GITLAB_SECRETS_OTP_KEY_BASE 値: 長くランダムな英数字の文字列 - 名前: GITLAB_ROOT_PASSWORD 値: シークレットキーリファレンス: 名前: git-user-pass キー: パスワード - 名前: GITLAB_ROOT_EMAIL 値: [email protected] - 名前: GITLAB_HOST 値: gitlab.binghe.com - 名前: GITLAB_PORT 値: "80" - 名前: GITLAB_SSH_PORT 値: "30022" - 名前: GITLAB_NOTIFY_ON_BROKEN_BUILDS 値: "true" - 名前: GITLAB_NOTIFY_PUSHER 値: "false" - 名前: GITLAB_BACKUP_SCHEDULE 価値: 毎日 - 名前: GITLAB_BACKUP_TIME 値: 01:00 - 名前: DB_TYPE 値: postgres - 名前: DB_HOST 値: postgresql - 名前: DB_PORT 値: "5432" - 名前: DB_USER 値: gitlab - 名前: DB_PASS 値: パスワード - 名前: DB_NAME 値: gitlab_production - 名前: REDIS_HOST 値: redis - 名前: REDIS_PORT 値: "6379" ポート: - 名前: http コンテナポート: 80 - 名前: ssh コンテナポート: 22 ボリュームマウント: - マウントパス: /home/git/data 名前: データ ライブネスプローブ: httpGet: パス: / ポート: 80 初期遅延秒数: 180 タイムアウト秒数: 5 準備プローブ: httpGet: パス: / ポート: 80 初期遅延秒数: 5 タイムアウト秒数: 1 ボリューム: - 名前: データ ホストパス: パス: /data1/docker/xinsrv/gitlab --- APIバージョン: v1 種類: サービス メタデータ: 名前: gitlab 名前空間: k8s-ops ラベル: 名前: gitlab 仕様: ポート: - 名前: http ポート: 80 ノードポート: 30088 - 名前: ssh ポート: 22 ターゲットポート: ssh ノードポート: 30022 タイプ: NodePort セレクタ: 名前: gitlab --- apiバージョン: extensions/v1beta1 種類: イングレス メタデータ: 名前: gitlab 名前空間: k8s-ops 注釈: kubernetes.io/ingress.class: traefik 仕様: ルール: - ホスト: gitlab.binghe.com http: パス: - バックエンド: サービス名: gitlab サービスポート: http
注意: GitLab を設定する場合、ホストをリッスンするときに IP アドレスは使用できません。ホスト名またはドメイン名を使用する必要があります。上記の設定では、gitlab.binghe.com というホスト名を使用しています。
コマンドラインで次のコマンドを実行して、/data1/docker/xinsrv/gitlab ディレクトリを作成します。
mkdir -p /data1/docker/xinsrv/gitlab
以下のようにGitLabをインストールします。
kubectl を適用 -f gitlab.yaml
以下に示すように、k8s-ops 名前空間のデプロイメントを確認します。
[root@test10 k8s]# kubectl get pod -n k8s-ops 名前 準備完了 ステータス 再起動 年齢 gitlab-7b459db47c-5vk6t 0/1 実行中 0 11秒 postgresql-79567459d7-x52vx 1/1 実行中 0 30分 redis-67f4cdc96c-h5ckz 1/1 実行中 1 10時間
次のコマンドを使用して表示することもできます。
[root@test10 k8s]# kubectl get pod --namespace=k8s-ops 名前 準備完了 ステータス 再起動 年齢 gitlab-7b459db47c-5vk6t 0/1 実行中 0 36秒 postgresql-79567459d7-x52vx 1/1 実行中 0 30分 Redis-67F4CDC96C-H5CKZ 1/1実行1 10H
2つは同じ効果があります。
次に、以下に示すように、gitlabのポートマッピングを確認します。
[root@test10 k8s]#kubectl get svc -n k8s -ops 名前 タイプ クラスター IP 外部 IP ポート 年齢 gitlab nodeport 10.96.153.100 <なし> 80:30088/tcp、22:30022/tcp 2m42s postgreSQl Clusterip 10.96.203.119 <NOE> 5432/TCP 32M Redis Clusterip 10.96.107.150 <NOE> 6379/TCP 10H
この時点で、GitLabには、マスターノード(TEST10)のホスト名gitlab.binghe.comおよびポート30088からアクセスできることがわかります。仮想マシンを使用して関連する環境を構築しているため、このマシンの仮想マシンにマッピングされたgitlab.binghe.comにアクセスするときに、ローカルホストファイルを構成し、以下の構成アイテムをローカルホストファイルに追加する必要があります。
192.168.0.10 gitlab.binghe.com
注:Windowsオペレーティングシステムでは、ホストファイルは次のディレクトリにあります。
c:\ windows \ system32 \ drivers \ etc
次に、以下に示すように、リンクhttp://gitlab.binghe.com:30088を介してブラウザのgitlabにアクセスできます。
この時点で、ユーザー名ルートとパスワードadmin.1231を使用してGitLabにログインできます。
注:rootはgitlabのデフォルトスーパーユーザーであるため、ここのユーザー名は管理者ではなくrootです。
この時点で、GitLabのK8Sインストールが完了しました。
Haborは、VMwareが開発したオープンソースコンテナ画像リポジトリです。実際、Haborは、これらの新しいエンタープライズレベルの機能を実現するために、Dockerレジストリで対応するエンタープライズレベルの拡張機能を作成しました。
注:ここでは、ハーバープライベートウェアハウスはマスターノード(Test10サーバー)にインストールされています。
wget https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz
TAR -ZXVF HARBOR-OFFLINE-INSTALLER-V1.10.2.TGZ
減圧が成功した後、サーバーの現在のディレクトリでハーバーディレクトリが生成されます。
注:ここでは、港の港を1180に変更しました。港の港を変更しない場合、デフォルトのポートは80です。
(1)Harbor.ymlファイルを変更します
CDハーバー vim ハーバー.yml
変更された構成アイテムは次のとおりです。
ホスト名:192.168.0.10 http: ポート:1180 harbor_admin_password:binghe123 ###およびコメントhttps、それ以外の場合、インストール中にエラーが報告されます:エラー:root:エラー:プロトコルはhttpsですが、属性SSL_CERTは設定されていません #https: #port:443 #証明書: /your/certificate/path #private_key: /あなたの/private/key/パス
(2)daemon.jsonファイルを変更します
/etc/docker/daemon.jsonファイルが存在しない場合は、/etc/docker/daemon.jsonファイルに次のコンテンツを追加します。
[root@binghe〜]#cat /etc/docker/daemon.json { 「レジストリ・ミラー」:["https://zz3sblpi.mirror.aliyuncs.com"]、 「Insecure-Registries」:["192.168.0.10:1180"]] }
サーバー上のIP ADDRコマンドを使用して、ローカルマシンのすべてのIPアドレスセグメントを表示し、/etc/docker/daemon.jsonファイルで構成することもできます。ここで、私の構成後のファイルの内容は次のとおりです。
{ 「レジストリ・ミラー」:["https://zz3sblpi.mirror.aliyuncs.com"]、 「Insecure-Registries ":[" 192.168.175.0/16"、 "172.17.0.0/16"、 "172.18.0.0/16"、 "172.16.29.0/16"、 "192.168.0.10:1180" "] }
構成が完了したら、次のコマンドを入力してインストールして港を開始します
[root@binghe Harbor]#./install.sh
インストールが成功したら、ブラウザアドレスバーにhttp://192.168.0.10:1180を入力してリンクを開き、ユーザー名管理とパスワードBinghe123を入力し、システムにログインします。
次に、ユーザー管理を選択し、管理者アカウントを追加して、Docker画像の後続のパッケージとDocker画像のアップロードに向けて準備します。
パスワードはbinghe123です。 [OK]をクリックしてください。アカウントは、この時点では、[管理者として設定]をクリックします。
この時点で、Bingheアカウントは管理者として設定されています。この時点で、港の設置が完了しました。
港を設置した後、港の港を変更する必要がある場合は、以下の手順に従って港を変更することができます。
(1)Harbor.ymlファイルを変更します
CDハーバー vim ハーバー.yml
変更された構成項目を以下に示します。
ホスト名:192.168.0.10 http: ポート:1180 harbor_admin_password:binghe123 ###およびコメントhttps、それ以外の場合、インストール中にエラーが報告されます:エラー:root:エラー:プロトコルはhttpsですが、属性SSL_CERTは設定されていません #https: #port:443 #証明書: /your/certificate/path #private_key: /あなたの/private/key/パス
(2)docker-compose.ymlファイルを変更します
Vim Docker-Compose.yml
変更された構成項目を以下に示します。
ポート: - 1180:80
(3)config.ymlファイルを変更します
CD共通/config/レジストリ VIM config.yml
変更された構成項目を以下に示します。
レルム:http:///192.168.0.10:1180/service/token
(4)Dockerを再起動します
systemctlデーモンリロード systemctl docker.service を再起動します。
(5)港を再起動します
[root@binghe harbor] #docker-compose down 港湾ログを停止しています...完了 nginx を削除しています...完了 港湾ポータルを削除しています...完了 harbor-jobservice を削除しています...完了 ハーバーコアを削除しています...完了 redis を削除しています...完了 レジストリを削除しています...完了 registryctl を削除しています...完了しました harbor-db を削除しています...完了 港のログを削除しています...完了 ネットワークharbor_harborの削除 [root@binghe Harbor]#./prepare 準備ベースディレクトリは/mnt/harborに設定されます 設定ファイルをクリアする: /config/log/logrotate.conf 設定ファイルをクリアする: /config/nginx/nginx.conf 設定ファイルをクリアする: /config/core/env 設定ファイルをクリアする: /config/core/app.conf 設定ファイルをクリアする: /config/registry/root.crt 設定ファイルをクリアする: /config/registry/config.yml 設定ファイルをクリアする: /config/registryctl/env 設定ファイルをクリアする: /config/registryctl/config.yml 設定ファイルをクリアする: /config/db/env 設定ファイルをクリアする: /config/jobservice/env 設定ファイルをクリアする: /config/jobservice/config.yml 生成された設定ファイル: /config/log/logrotate.conf 生成された設定ファイル: /config/nginx/nginx.conf 生成された設定ファイル: /config/core/env 生成された構成ファイル: /config/core/app.conf 生成された構成ファイル: /config/registry/config.yml 生成された設定ファイル: /config/registryctl/env 生成された構成ファイル: /config/db/env 生成された構成ファイル: /config/jobservice/env 生成された構成ファイル: /config/jobservice/config.yml ファイルからシークレットをロードしました: /secret/keys/secretkey 生成された構成ファイル: /compose_location/docker-compose.yml 入力ディレクトリをクリーンアップする [root@binghe Harbor] #docker -compose up -d デフォルトのドライバーでネットワーク「harbor_harbor」を作成します 港ログを作成中...完了 harbor-db を作成しています...完了 redis を作成しています...完了 レジストリを作成しています...完了 registryctl を作成しています...完了しました ハーバーコアを作成中...完了 harbor-jobservice を作成しています...完了 港湾ポータルを作成中...完了 nginx を作成しています...完了 [root@binghe harbor] #docker ps -a コンテナID イメージ コマンド 作成ステータス ポート
Jenkinsは、Hudsonから生まれたフレンドリーな操作インターフェイスを提供するオープンソースの連続統合(CI)ツールです。 JenkinsはJavaで書かれており、Tomcatなどの人気のあるサーブレットコンテナや独立して実行できます。通常、バージョン管理ツール(SCM)とビルドツールと組み合わせて使用されます。一般的なバージョン制御ツールにはSVNとGITが含まれ、構造ツールにはMaven、Ant、Gradleが含まれます。
NFSの最大の問題は、Kubernetesのセキュリティコンテスト/Runasuserを使用して、JenkinsコンテナのJenkinsのユーザーを指定できます。簡単にするために、すべてのユーザーが書くことができます。
NFSが以前にインストールされていた場合、このステップは省略できます。ホストを見つけて、NFSをインストールしてください。
NFSをインストールして起動するには、コマンドラインに次のコマンドを入力します。
yumインストールnfs -utils -y Systemctlはnfs-serverを開始します systemctl nfs-serverを有効にします
以下に示すように、マスターノード(TEST10サーバー)のNFSの共有ディレクトリとして/opt/nfs/jenkins-data
ディレクトリを作成します。
mkdir -p/opt/nfs/jenkins -data
次に、以下に示すように /etc /exportsファイルを編集します。
vim /etc/エクスポート
/etc /exportsファイルに次の構成行を追加します。
/opt/nfs/jenkins-data 192.168.175.0/24(rw、all_squash)
ここでは、Kubernetes /opt/nfs/jenkins-data
ノードall_squash
IP範囲を使用します。
このオプションは、ユーザーのUIDが標準化されていないため、多くのマシンで異なりますが、共有ディレクトリに許可を書き込む場合は非常に効果的です。
次に、以下に示すように、 /opt/nfs/jenkins-data
ディレクトリを承認し、NFSをリロードします。
#chown -r 1000/opt/nfs/jenkins -data/ #reload nfs-server SystemCtl RELOAD NFS-SERVER
次のコマンドを使用して、K8Sクラスターのノードで確認してください。
#View Directory NFS System ShowMount -E NFS_IPの権限
あなたが/opt/nfs/jenkins-dataを見ることができる場合、それは大丈夫です。
詳細を以下に示します。
[root@test10〜] #showmount -e 192.168.0.10 192.168.0.10のエクスポートリスト: /opt/nfs/jenkins-data 192.168.175.0/24 [root@test11〜] #showmount -e 192.168.0.10 192.168.0.10のエクスポートリスト: /opt/nfs/jenkins-data 192.168.175.0/24
実際、Jenkinsは対応するディレクトリを読み込むことで以前のデータを読み取ることができますが、展開はストレージボリュームを定義できないため、StateFulsetのみを使用できます。
まず、PVを作成するたびに、PVはPVCバインディングに使用されるためにPVを使用して作成されます。
Jenkins-Pv.yamlファイルを作成すると、ファイルの内容は次のとおりです。
APIバージョン: v1 種類:PersistentVolume メタデータ: 名前:ジェンキンス 仕様: NFS: パス:/opt/nfs/jenkins-data サーバー:192.168.0.10 AccessModes:["readwriteonce"] 容量: ストレージ:1ti
ここでは、1Tのストレージスペースを提供しました。これは、実際の構成に従って構成できます。
次のコマンドを実行して、PVを作成します。
kubectl apply -f jenkins -pv.yaml
Jenkinsが奴隷を動的に作成できる必要があるため、サービスアカウントを作成するため、いくつかの許可が必要です。
Jenkins-Service-Account.yamlファイルを作成すると、ファイルの内容は次のとおりです。
APIバージョン: v1 種類: サービスアカウント メタデータ: 名前:ジェンキンス --- 種類: 役割 APIバージョン: rbac.authorization.k8s.io/v1beta1 メタデータ: 名前:ジェンキンス ルール: - apigroups:[""] リソース:["Pods"] 動詞:["create"、 "delete"、 "get"、 "list"、 "patch"、 "update"、 "watch"]] - apigroups:[""] リソース:["Pods/Exec"] 動詞:["create"、 "delete"、 "get"、 "list"、 "patch"、 "update"、 "watch"]] - apigroups:[""] リソース:["pods/log"] 動詞:["get"、 "list"、 "watch"] - apigroups:[""] リソース:["Secrets"] 動詞:["get"] --- APIバージョン: rbac.authorization.k8s.io/v1beta1 種類: RoleBinding メタデータ: 名前:ジェンキンス ロールリファレンス: apiグループ: rbac.authorization.k8s.io 種類: 役割 名前:ジェンキンス 科目: - 種類: サービスアカウント 名前:ジェンキンス
上記の構成では、ロールバインディングとServiceAcCountが作成され、ロールバインディングの権限がこのユーザーにバインドされます。したがって、JenkinsコンテナはこのServiceAcCountを使用して実行する必要があります。そうしないと、ロールバインディングの権限がありません。
ジェンキンスは奴隷を作成して削除する必要があるため、ロールバインディングの許可は理解しやすいため、上記の許可が必要です。秘密の許可に関しては、それはHTTPS証明書です。
次のコマンドを実行して、ServiceAcCountを作成します。
kubectl apply -f jenkins-service-account.yaml
jenkins-statefulset.yamlファイルを作成すると、ファイルの内容は次のとおりです。
APIバージョン: アプリ/v1 種類: ステートフルセット メタデータ: 名前:ジェンキンス ラベル: 名前:ジェンキンス 仕様: セレクタ: 一致ラベル: 名前:ジェンキンス Servicename:ジェンキンス レプリカ: 1 Updatestrategy: タイプ: ローリングアップデート テンプレート: メタデータ: 名前:ジェンキンス ラベル: 名前:ジェンキンス 仕様: TerminationGracePerioDSeconds:10 ServiceAcCountName:Jenkins コンテナ: - 名前:ジェンキンス 画像:docker.io/jenkins/jenkins:lts イメージプルポリシー: IfNotPresent ポート: -containerport:8080 -containerport:32100 リソース: 制限: CPU:4 メモリ:4GI リクエスト: CPU:4 メモリ:4GI 環境: - 名前:limits_memory 値: ResourceFieldref: リソース:Limits.Memory 除数:1mi - 名前:java_opts #値:-xx:+lockexperimentalvmoptions -xx:+usecgroupmemorylimitforheap -xx:maxramfraction = 1 -xshowsettings:vm -dhudson.slaves.nodeprovisioner.initialdelay = 0 -dhudson.nodeprovision.slaves.nodeprovision. rovisioner.margin0 = 0.85 値:-xmx $(limits_memory)m -xshowsettings:vm -dhudson.slaves.nodeprovisioner.initialdelay = 0 -dhudson.slaves.nodeprovisioner.margin = 50 -dhudson.slaves.nodeprovision.margin0 = 0.85 ボリュームマウント: - 名前:Jenkins-Home MountPath: /var /jenkins_home ライブネスプローブ: httpGet: パス: /ログイン ポート: 8080 InitialDelayseconds:60 タイムアウトセカンド:5 FailureThreshold:12#〜2分 準備プローブ: httpGet: パス: /ログイン ポート: 8080 InitialDelayseconds:60 タイムアウトセカンド:5 FailureThreshold:12#〜2分 #PVCテンプレート、以前のPVに対応しています volumeclaimtemplates: - メタデータ: 名前:Jenkins-Home 仕様: AccessModes:["readwriteonce"] リソース: リクエスト: ストレージ:1ti
Jenkinsを展開するときは、レプリカに注意する必要があります。ここでは、1つのコピーのみを使用したため、前にPVを1つだけ作成しました。
次のコマンドを使用して、Jenkinsをインストールします。
kubectl apply -f jenkins -statefulset.yaml
主にjenkinsを背景に実行するために使用されるJenkins-service.yamlファイルを作成すると、ファイルのコンテンツは次のとおりです。
APIバージョン: v1 種類: サービス メタデータ: 名前:ジェンキンス 仕様: #タイプ:LoadBalancer セレクタ: 名前:ジェンキンス #ロードバランサーを使用するときに無効なパン粉の問題を回避するために、クライアントIPが伝播されていることを確認します(K8S> = 1.7) #externaltrafficpolicy:ローカル ポート: - 名前: http ポート: 80 nodeport:31888 ターゲットポート:8080 プロトコル: TCP - 名前:Jenkins-Agent ポート:32100 nodeport:32100 ターゲットポート:32100 プロトコル: TCP タイプ: NodePort
次のコマンドを使用してサービスをインストールします。
kubectl apply -f jenkins-service.yaml
JenkinsのWebインターフェイスには、クラスターの外側からアクセスする必要があります。ここでは、Ingressを使用することを選択します。 jenkins-ingress.yamlファイルを作成すると、ファイルの内容は次のとおりです。
apiバージョン: extensions/v1beta1 種類: イングレス メタデータ: 名前:ジェンキンス 仕様: ルール: -HTTP: パス: - パス: / バックエンド: Servicename:ジェンキンス ServicePort:31888 ホスト:jekins.binghe.com
ここでは、以下に示すように、ホストをドメイン名またはホスト名として構成する必要があることに注意する必要があります。
イングレス「ジェンキンス」は無効です:spec.rules [0] .host:無効な値: "192.168.0.10":IPアドレスではなくDNS名でなければなりません
次のコマンドを使用して、Ingressをインストールします。
kubectl apply -f jenkins-ingress.yaml
最後に、仮想マシンを使用して関連環境を構築するため、Virtual MachineによってマッピングされたJekins.binghe.comにアクセスするときに、マシンのホストファイルを構成し、マシンのホストファイルに次の構成アイテムを追加する必要があります。
192.168.0.10 jekins.binghe.com
注:Windowsオペレーティングシステムでは、ホストファイルが配置されているディレクトリは次のとおりです。
c:\ windows \ system32 \ drivers \ etc
次に、リンクを介してjekinsにアクセスできます:http://jekins.binghe.com:31888ブラウザで。
Apache Subversionは、2000年にCollabnet Incによって開発されたSVNとしてしばしば省略されており、現在はApache Software Foundationのプロジェクトに成長し、開発者とユーザーの豊富なコミュニティの一部です。
RCSおよびCVSと比較して、SVNはブランチ管理システムを採用しており、その設計目標はCVSを置き換えることです。インターネット上の無料版制御サービスは、主に転覆に基づいています。
ここでは、例としてマスターノード(Binghe101サーバー)にSVNをインストールします。
コマンドラインで次のコマンドを実行して、SVNをインストールします。
yum -y subversionをインストールします
次のコマンドを順番に実行します。
#create/data/svn mkdir -p /data /svn #initialize svn svnserve -d -r /data /svn #コードリポジトリsvnadmin create/data/svn/testを作成します
mkdir/data/svn/conf cp/data/svn/test/conf/*/data/svn/conf/ cd/data/svn/conf/ [root@binghe101 conf]#ll 総投与量20 -RW-R - R-- 1ルートルート1080 5月12日02:17 AUTHZ -RW-R - R-- 1ルートルート885 5月12日02:17 HOOKS-ENV.TMPL -rw-r - r-- 1ルートルート309 5月12日02:17 passwd -RW-R - R-- 1ルートルート4375 5月12日02:17 SVNSERVE.CONF
authzファイルを構成し、
vim authz
構成コンテンツを以下に示します。
[エイリアス] #joe =/c = xz/st = dessert/l = snake city/o = senake oil、ltd [グループ] #harry_and_sally =ハリー、サリー #harry_sally_and_joe =ハリー、サリー、ジョー superadmin = admin binghe = admin、binghe #[/foo/bar] #harry = rw #&joe = r # * = #[リポジトリ:/baz/fuz] #@harry_and_sally = rw # * = r [テスト:/] @superadmin = rw @binghe = rw
passwdファイルを構成します
vim passwd
構成コンテンツを以下に示します。
[ユーザー] #harry = harrysecret #sally = sallyssecret admin = admin123 binghe = binghe123
svnserve.confを構成します
vim svnserve.conf
構成されたファイルを以下に示します。
###このファイルは、svnserveデーモンの構成を制御します。 ###このリポジトリへのアクセスを許可します ### http:and/or file:urlsを介したアクセス、このファイルは ###無関係です。) ###詳細については、http://subversion.apache.org/をご覧ください。 [一般的な] ### Anon-AccessおよびAuth-Accessオプションを制御するアクセス ### Unauthenticated(別名匿名)ユーザーのリポジトリ ###それぞれ認証ユーザー。 ###有効な値は「書き込み」、「読み取り」、および「なし」です。 ###値を「なし」に設定すると、読み書きの両方を禁止します。 ### "read"を使用すると、読み取り専用アクセスが可能になり、「書き込み」は完全になります ###リポジトリへの読み取り/書き込みアクセス。 ###以下のサンプル設定はデフォルトであり、匿名であることを指定します ###ユーザーはリポジトリへの読み取り専用アクセスを持っていますが、認証されています ###ユーザーはリポジトリへの読み取りおよび書き込みアクセスを持っています。 anon-access = none auth-access =書き込み ###パスワードdbオプションはパスワードの場所を制御します ###データベースファイル。 ###ファイルの場所は、含まれるディレクトリに関連しています ###この構成ファイル。 ### SASLが有効になっている場合(以下を参照)、このファイルは使用されません。 ###以下の行を除外して、デフォルトのパスワードファイルを使用します。 Password-db =/data/svn/conf/passwd ### authz-dbオプションは承認の場所を制御します ###パスを指定しない限り ### A /で始まる、ファイルの場所は ###このファイルを含むディレクトリ ### Repository相対URL(^/)または絶対file:// urlへのテキストへ ### subversionリポジトリのファイル。 ###パスベースのアクセス制御は行われていません。 ###以下の行を除外して、デフォルトの承認ファイルを使用します。 authz-db =/data/svn/conf/authz ###グループ-DBオプションは、ファイルの場所をで制御します ###グループの定義とグループを維持することを可能にします ###承認ルール。 ### authz-dbファイルと、 ###グループの定義が有効になっている場合、authz-dbファイルはできません ###は[グループ]セクションを含めます ### a /、ファイルの場所はこれを含むディレクトリに関連しています ###ファイル。 ### subversionリポジトリ内のテキストファイルへの絶対ファイル:// url。 ###このオプションはデフォルトでは使用されていません。 #グループdb =グループ ###このオプションは、リポジトリの認証領域を指定します。 ### 2つのリポジトリが同じ認証領域を持っている場合、彼らはそうする必要があります ###は同じパスワードデータベースを持っています ###はリポジトリのUUIDです。 Realm = svn ### Force-Username-Caseオプションにより、SVNServeがケースナルス化されます ### usersNamesを承認ルールと比較する前に ###上記のauthz-dbファイルは「上」です。 ###ケースのユーザー名)、 "lower"(ユーザー名を小文字にする)、および ### "none"(as-as-as as as as as as as as as as as-canse nowを比較するには、 ###はデフォルトの動作です)。 #force-username-case = none ###フック-ENVオプションフックスクリプト環境へのパスを指定します ###構成ファイル ###と複数のフックスクリプト環境を構成するために使用できます ###絶対パスが指定されている場合、単一のファイルのリポジトリ。 ###絶対パスを指定しない限り、ファイルの場所は相対的です ###このファイルを含むディレクトリへ。 #hooks-env = hooks-env [SASL] ###このオプションは、Cyrus SASLを使用するかどうかを指定します ###認証のためのライブラリはfalseです。 ###このオプションを有効にするには、SVNServeがCyrusで構築される必要があります ### saslサポート、「svnserve」をチェックして、ラインを探します ###「Cyrus SASL認証が利用可能です。」 #use-sasl = true ###これらのオプションは、セキュリティレイヤーの目的の強度を指定します ### SASLが提供したいということは、暗号化を意味しません ### Integrity-Checkingのみ、1を超える値は相関しています 暗号化の有効キー長に###(例えば128は128ビットを意味します ### Encryption)。 #min-encryption = 0 #max-encryption = 256
次に、/data/svn/confディレクトリのsvnserve.confファイルを/data/svn/test/conf/directoryにコピーします。下記の通りです。
[root@binghe101 conf]#cp /data/svn/conf/svnserve.conf/data/svn/test/conf/ cp:それは無効にされていますか?/data/svn/test/conf/svnserve.conf '?ええ
(1)svnserve.serviceサービスを作成します
svnserve.serviceファイルを作成します
vim/usr/lib/systemd/system/svnserve.service
ファイルの内容を以下に示します。
[ユニット] 説明= Subversion Protocol Daemon after = syslog.target network.target ドキュメンテーション=男:svnserve(8) [サービス] タイプ=フォーク 環境file =/etc/sysconfig/svnserve #execstart =/usr/bin/svnserve - daemon - pid-file =/run/svnserve/svnserve.pid $ options execStart =/usr/bin/svnserve - daemon $ options privatetmp =はい [インストール] WantedBy=マルチユーザー.ターゲット
次に、次のコマンドを実行して、構成を有効にします。
systemctlデーモンリロード
コマンドの実行が成功したら、/etc/sysconfig/svnserveファイルを変更します。
vim/etc/sysconfig/svnserve
変更されたファイルの内容は次のとおりです。
#オプションは、コマンドライン引数をsvnserveに渡すために使用されます。 # #-rパラメーターでリポジトリの場所を指定します。 options = "-r /data /svn"
(2)SVNを開始します
以下に示すように、最初にSVNステータスを確認してください。
[root@test10 conf] #SystemCtlステータスsvnserve.Service ●SVNSERVE.Service -Subversion Protocol Daemon ロード:ロード:(/usr/lib/systemd/system/svnserve.service; disabled; vendor preset:disabled) アクティブ: 非アクティブ (デッド) docs:man:svnserve(8)
この時点でSVNが開始されていないことがわかり、次にSVNを開始する必要があります。
Systemctl Start SvnServe.Service
SVNサービスを自動的に開始するように設定します。
SystemCtl enable svnserve.service
次に、TortoiseSVNをダウンロードしてインストールし、リンクsvn://192.168.0.10/testを入力し、ユーザー名BingheとパスワードBinghe123を入力してSVNに接続できます。
SVN画像を引っ張ります
docker pull docker.io/elleflorio/svn-server
SVNコンテナを起動します
docker run -V/usr/local/svn:/home/svn -v/usr/svn/passwd:/etc/subversion/passwd -v/usr/local/apache2 - name svn_server -p 3380:80 -p 3690 Ver
SVNコンテナを入力します
docker exec -it svn_server bash
コンテナを入力した後、物理マシンによるSVNを設置する方法を参照して、SVNウェアハウスを構成できます。
注:Jenkinsをインストールする前に、JDKとMavenをインストールする必要があります。
次のコマンドを実行して、レポファイルをダウンロードし、GPGキーをインポートします。
wget -o/etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo rpm -import https://jenkins-ci.org/redhat/jenkins-ci.org.key
次のコマンドを実行してJenkisをインストールします。
YumインストールJenkins
次に、以下に示すように、Jenkinsのデフォルトポートを変更します。
vim/etc/sysconfig/jenkins
変更された2つの構成を以下に示します。
jenkins_java_cmd = "/usr/local/jdk1.8.0_212/bin/java" jenkins_port = "18080"
この時点で、ジェンキンスの港は8080から18080に変更されました
ジェンキンスを開始するには、コマンドラインに次のコマンドを入力します。
SystemctlはJenkinsを開始します
Jenkinsを自動的に起動するように構成します。
systemctl enable jenkins
Jenkinsの実行ステータスを確認してください。
[root@test10〜] #SystemCtlステータスJenkins ●Jenkins.Service -LSB:Jenkins Automation Server 読み込まれた:loaded(/etc/rc.d/init.d/jenkins; generated) アクティブ:2020-05-12 04:33:40 EDT以降 ドキュメント:Man:SystemD-Sysv-Generator(8) タスク:71(制限:26213) メモリ:550.8m
説明:ジェンキンスは正常に開始しました。
最初のインストールの後、Jenkinsの実行環境を構成する必要があります。まず、ブラウザアドレスバーにリンクhttp://192.168.0.10:18080にアクセスし、Jenkinsインターフェイスを開きます。
プロンプトに従って、以下に示すように、次のコマンドを使用してサーバー上のパスワード値を見つけます。
[root@binghe101〜] 71AF861C2AB948A1B6EFC9F7DDE90776
パスワード71AF861C2AB948A1B6EFC9F7DDE90776をテキストボックスにコピーし、[続行]をクリックします。以下に示すように、カスタムJenkinsページにジャンプします。
ここでは、「推奨プラグインのインストール」を直接選択できます。次に、以下に示すように、プラグインがインストールされているページにジャンプします。
この手順はダウンロードに失敗する可能性があり、直接無視できます。
インストールするプラグイン
より多くのプラグインがあります。[システム管理]をクリックして、それらを管理して追加し、対応するDockerプラグイン、SSHプラグイン、およびMavenプラグインをインストールできます。必要に応じて、他のプラグインをインストールできます。下の図の通りです。
(1)JDKとMavenを構成します
以下に示すように、グローバルツール構成でJDKとMavenを構成するには、グローバルツール構成インターフェイスを開きます。
次に、JDKとMavenの構成を開始します。
以下の図に示すように、Mavenをサーバーに/usr/local/maven-3.6.3ディレクトリにインストールしたため、「Maven Configuration」で設定する必要があります。
次に、以下に示すようにJDKを構成します。
注:「自動的にインストール」を確認しないでください
次に、以下に示すようにMavenを構成します。
注:「自動的にインストール」を確認しないでください
(2)SSHを構成します
以下に示すように、SSHを構成するには、Jenkinsの構成システムインターフェイスを入力します。
構成用のSSHリモートホストを見つけます。
構成が完了したら、[接続]チェックボタンをクリックすると、成功した接続が表示されます。下記の通りです。
この時点で、ジェンキンスの基本的な構成が完了します。
実装:以下に示すように、SpringbootプロジェクトにスプリングブートプロジェクトにあるモジュールのPOM.xmlは、Docker画像にパッケージ化するために導入する必要があります。
<プロパティ> <docker.Repostory> 192.168.0.10:1180 </docker.repostory> <docker.registry.name> test </docker.registry.name> <docker.image.tag> 1.0.0 </docker.image.tag> <docker.maven.plugin.version> 1.4.10 </docker.maven.plugin.version> </プロパティ> <ビルド> <FinalName> test-starter </finalName> <プラグイン> <プラグイン> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </プラグイン> <! - Docker's Mavenプラグイン、公式ウェブサイト:https://github.com/spotify/docker-maven-plugin-> <!-- Dockerfile Maven プラグイン --> <プラグイン> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <バージョン> $ {docker.maven.plugin.version} </version> <処刑> <実行> <id>デフォルト</id> <目標> <! - dockerを使用してパッケージをパッケージ化したくない場合は、この目標をコメントしてください - > <goal>ビルド</goal> <goal>プッシュ</goal> </目標> </実行> </処刑> <構成> <contextdirectory> $ {project.basedir} </contextDirectory> <! - ハーバーウェアハウスのユーザー名とパスワード - > <usemavensettingsforauth> usemavensettingsforauth> true </usemavensettingsforauth> <Repository> $ {docker.repostory}/$ {docker.registry.name}/$ {project.artifactid} </repository> <tag> $ {docker.image.tag} </tag> <ビルド引数> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </構成> </プラグイン> </プラグイン> <リソース> <! - src/main/resourcesの下のすべてのファイルとフォルダーをリソースファイルとして指定します - > <リソース> <ディレクトリ>src/main/resources</ディレクトリ> <TargetPath> $ {project.build.directory}/classes </targetPath> <含まれるもの> <cluding> **/*</include> </includes> <フィルタリング>真</フィルタリング> </リソース> </リソース> </ビルド>
次に、スプリングブートの起動クラスがあるモジュールのルートディレクトリにDockerFileを作成します。
#ADD依存関係環境、前提は、Java8 Docker画像を公式画像リポジトリから引き出し、192.168.0.0.10:1180/library/java:8から自分のHarborプライベートリポジトリにアップロードすることです。 #画像作成作家メンテナーBingheを指定します #Run Directory Volume /TMP #copy containerにローカルファイルを追加しますターゲット/*jar app.jar #コンテナを起動した後に自動的に実行されるコマンドエントリポイント["java"、 "-djava.security.egd = file:/dev/./ urandom"、 "-jar"、 "/app.jar"]]
実際の状況に従って自分で修正します。
注:192.168.0.10:1180/library/java:8の前提は、次のコマンドを実行することです。
docker pull java:8 Docker Tag Java:8 192.168.0.10:1180/library/java:8 Dockerログイン192.168.0.10:1180 Docker Push 192.168.0.10:1180/library/java:8
以下に示すように、Springboot Startupクラスが配置されているモジュールのルートディレクトリにYAMLファイルを作成し、test.yamlというファイルを入力します。
APIバージョン: アプリ/v1 種類: デプロイメント メタデータ: 名前:テストスターター ラベル: アプリ:テストスターター 仕様: レプリカ: 1 セレクタ: 一致ラベル: アプリ:テストスターター テンプレート: メタデータ: ラベル: アプリ:テストスターター 仕様: コンテナ: - 名前:テストスターター 画像:192.168.0.10:1180/test/test-starter:1.0.0 ポート: -containerport:8088 ノードセレクター: ClusterType:node12 --- APIバージョン: v1 種類: サービス メタデータ: 名前:テストスターター ラベル: アプリ:テストスターター 仕様: ポート: - 名前: http ポート: 8088 nodeport:30001 タイプ: NodePort セレクタ: アプリ:テストスターター
たとえば、プロジェクトをSVNコードベースにアップロードします。アドレスはsvn://192.168.0.10/testです。
次に、Jenkinsで自動パブリッシングを構成します。手順は次のとおりです。
新しいアイテムをクリックします。
以下に示すように、説明テキストボックスに説明情報を入力してください。
次に、SVN情報を構成します。
注:gitlabを構成するための手順はSVNの手順と同じであるため、詳細は説明しません。
Jenkinsの「ビルドモジュール」への位置決め、Execute Shellを使用して、K8Sクラスターに公開プロジェクトを構築します。
実行されたコマンドは、次の順序で表示されます。
#Deleting Original Local画像は、Harbor Repository Docker RMI 192.168.0.10:1180/test/test-starter:1.0.0の画像に影響しません。 #collection and build docker imagesを使用します。 #Login Harbor Repository Dockerログイン192.168.0.10:1180 -U Binghe -P Binghe123 #upload harbourリポジトリのドッカープッシュ192.168.0.10:1180/test/test-starter:1.0.0 #stop and delete/usr/bin/kubectl delete -f test.yamlはK8Sクラスターで実行されています #Republish Docker Image to K8s Cluster/usr/bin/kubectl Apply -f test.yaml
これは、Docker+K8S+Gitlab/SVN+Jenkins+Harber(環境建設)に基づく継続的な統合配信環境の構築に関する記事です。
>>: Discuz! フォーラムに設定オプションを追加する方法
まず最初に指摘しておきたいのは、人間は視覚的な区分を通じてコンテンツの意味を判断できるが、検索エ...
目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...
1. ダウンロード1. MySQL公式サイトのダウンロードアドレス: https://downloa...
ins と del は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、...
ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...
MySQL公式サイト: https://www.mysql.com/downloads/ http...
今日はあまり使わないHTMLタグ「subタグ」と「supタグ」を紹介します。関連記事: HTML タ...
序文: 最近の医療モバイル プロジェクトに基づいて、Vue はさまざまな画面のさまざまな画面サイズに...
1. 文字セットを確認する1. MYSQLデータベースサーバーとデータベースの文字セットを確認する方...
目次1. テレポートについて知る2. テレポートの基本的な使い方3. 最初のステップの最適化4. 第...
これまでに CSS の基本的なセレクターをいくつか学習しましたが、今日は CSS の複雑なセレクター...
今日は折り紙飛行機(飛べる飛行機)を作ります基本的にすべてCSSで実装されており、JSはごく一部に過...
Vue親コンポーネントは子コンポーネントの関数を呼び出す親コンポーネントはイベントを通じて子コンポー...
webpackはCSSファイルとその設定をロードします複数の CSS ファイルを作成した後、HTML...
グリッドシステムの形成1692年、新しく即位したフランス国王ルイ14世は、フランスの印刷技術のレベル...