コンテナ、ミラー、コンテナの3つの基本的な構成要素として知られている倉庫は、楽しいK8Sは当然運命ミラーリング倉庫建物、私はここに繰り返すことが必要であるとは思わない民間の倉庫鏡の必要性を免れることはできません。今日、この記事では、民間港ミラーリング倉庫を構築するための展開プロセスを完了K8Sした実験環境を説明しています。
K8Sハーバーは、ミラー倉庫としてそれを使用する必要がありますか?もちろん、必ずしも、しかし、あなたは対照的に知っているよ、私たちはあなたのような振り付けデファクト標準コンテナとしてK8Sより良いほとんど秒のように、あらゆる点でハーバーをしようとしていると、ほぼ唯一のオプションとなっています選択します。
また、これは苦労し熟考著者である、そして成功したと、専用のこの記事に読者を執筆することを目的に、それを展開するようにしてください。
実験環境を紹介し、仕事に取り掛かる、がらくたをカット:
1、CentOSの7最小
2、K8Sは、単一ノード1.15.5マスタ;(1.16変化が大きいために、全てが最高のバージョン1.15を使用可能)
3、舵2.15
4、港
舵を展開し
、ヘルムクライアントのインストール
ロットヘルムのインストールは、これがインストールされたバイナリ使用しています。もっとヘルムのインストール方法は、公式のヘルプドキュメントを参照してくださいすることができます。
方法1:公式のワンクリックインストールで提供されるスクリプトを使用します
カールhttps://raw.githubusercontent.com/helm/helm/master/scripts/get> get_helm.sh のchmod 700 get_helm.sh ./get_helm.sh
二、ヘルムサーバーのインストールティラー
注:特にエラーが次のように報告される、クラスタK8S内の各ノードに(YUM -y socatに関するインストール)ソフトウェアをインストールsocatに関する。
socatに関するが見つかりません:ポート転送を行うことができない:エラーがdc6da4ab99ad9c497c0cef1776b9dd18e0a612d507e2746ed63d36ef40f30174、UIDをポッドポート44134を転送します。 エラー:ティラーに接続することはできません
centos7がデフォルトでインストールされているので、私を無視し、インストールを確認してください。
ティラーはKubernetes展開クラスタにデプロイされ、あなたは単にインストールを完了するために、以下の簡単な手順を使用することができます。
ヘルムのinit
第三に、ティラーを許可するために
、サーバーティラーヘルムがKUBE-System名前空間でKubernetesで展開展開があるので、それはアプリケーションの中Kubernetesで接続KUBE-APIを作成し、削除するために行くだろう。
Kubernetesバージョン1.6の当初から、APIサーバーは、RBACの承認を可能にしました。デフォルトは定義されていませんServiceAccount現在ティラーは、アクセスAPIサーバーを拒否さにつながることができます展開を、承認しました。だから我々は、明示的に追加ティラーの展開を承認する必要があります。
Kubernetesサービスアカウントを作成し、ティラー役割を結合:
kubectl作成serviceaccount --namespace KUBE-システムティラー clusterrolebindingティラー・クラスタ・ルール--clusterroleを作成kubectl =クラスタ管理者--serviceaccount = KUBE-システム:ティラー
kubectlパッチ更新のAPIオブジェクトを使用します。
kubectlパッチは、ティラー展開--namespace KUBEシステムの展開-p '{ "スペック":{ "テンプレート":{ "スペック":{ "serviceAccount": "チラー"}}}}
認証が成功したかどうかを確認するには
--namespace KUBE-システムを展開取得kubectl YAML --outputティラー-展開| grepをserviceAccount serviceAccount:ティラー serviceAccountName:ティラー
第四に、インストールが成功ティラーであったかどうかを検証します
kubectl -n KUBE-システムはポッド取得| grepのティラー 耕運機-デプロイ- 6d68f5c78f-nql2z 1/1 0 5メートルの実行 ヘルムバージョンの クライアントを:&version.Version {SemVer: "v2.15.0"、GitCommit: "c2440264ca6c078a06e088a838b0476d2fc14750"、GitTreeState:「クリーン"} サーバー:&version.Version {SemVer:" v2.15.0" 、GitCommit: "c2440264ca6c078a06e088a838b0476d2fc14750"、GitTreeState: ""クリーン}
港のインストール
公式発表では具体的な表情https://github.com/goharbor/harbor-helmは
ヘルム倉庫を追加します。
舵レポ追加港https://helm.goharbor.io
公式の導入チュートリアルでは、ここで、(私の心は静かにそれはここで挨拶)マスターされている詳細な動作の基本的なポイントであることを前提としています。
まず、港のチャート項目の検索:
ヘルム検索港
第二に、地元、修正しやすいvalues.yamlにダウンロード:
実権を握っ港/港をフェッチ
解凍プロジェクトパッケージのダウンロード、解凍して、経路変更values.yamlファイルを入力します。
タールzxvf港-1.2.1.tgzの CD港 Vimのvalues.yaml
パラメータは、公式の説明を参照しますが、初心者のために、データの永続性に加えて、修正する必要があり、他のすべてのデフォルト値、そしておなじみのレビューの後ろに一つずつできる変更します。
「NFS」、私は事前に展開してきました、:STORAGECLASSなど、すべてのSTORAGECLASSをvalues.yaml変更
あなたはそれを逃した場合、あなたが戻って行くことができて、私のチュートリアル「を見て予備Kubernetesダイナミックボリューム・ストレージ(NFS)」、に戻ってそれを置く:https://blog.51cto.com/kingda/2440315。
もちろん、あなたが直接このファイルにステートメントを変更することができます。
SED -iさん#のSTORAGECLASS: "" #storageClass: "NFS" #G "values.yaml
その後、別の場所ですべてのデフォルト、およびインストールを開始します。
舵は--name港-V1をインストールします。--wait --timeout 1500 --debug --namespace港
PVが自動的に作成され、PVCは早くあなたが思うように動作しない場合がありますので、非常に多くのポッドは、最初にエラーにつながる、それは少し患者でなければならず、何度か再起動する準備ができるまで待ちます。
インストールコマンドの実行上の一つの状態で立ち往生されている可能性があり、少しの忍耐を持っており、すべてのポッドを待つようにしてください舵がすべてポッドの状態を検出するためにインストールして実行されますが、正常に起動しています。
我々は唯一のデフォルトのインストール設定を使用しているので、デフォルトは港湾サービスを公開するヘルム進入方法を開始することですので、あなたが入力コントローラをプリインストールしていない場合、その後、港の正常な動作に影響を与えませんが、あなたがそれにアクセスすることはできませんが、
したがって、以下は進入コントローラをインストールする方法について説明します。
そこの公式ソースはK8Sが、ここではキーのインストール・スクリプト・ファイルに直接投稿されています。
apiVersion: v1 kind: Namespace metadata: name: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- kind: ConfigMap apiVersion: v1 metadata: name: nginx-configuration namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- kind: ConfigMap apiVersion: v1 metadata: name: tcp-services namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- kind: ConfigMap apiVersion: v1 metadata: name: udp-services namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- apiVersion: v1 kind: ServiceAccount metadata: name: nginx-ingress-serviceaccount namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: nginx-ingress-clusterrole labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx rules: - apiGroups: - "" resources: - configmaps - endpoints - nodes - pods - secrets verbs: - list - watch - apiGroups: - "" resources: - nodes verbs: - get - apiGroups: - "" resources: - services verbs: - get - list - watch - apiGroups: - "extensions" resources: - ingresses verbs: - get - list - watch - apiGroups: - "" resources: - events verbs: - create - patch - apiGroups: - "extensions" resources: - ingresses/status verbs: - update --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: Role metadata: name: nginx-ingress-role namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx rules: - apiGroups: - "" resources: - configmaps - pods - secrets - namespaces verbs: - get - apiGroups: - "" resources: - configmaps resourceNames: # Defaults to "<election-id>-<ingress-class>" # Here: "<ingress-controller-leader>-<nginx>" # This has to be adapted if you change either parameter # when launching the nginx-ingress-controller. - "ingress-controller-leader-nginx" verbs: - get - update - apiGroups: - "" resources: - configmaps verbs: - create - apiGroups: - "" resources: - endpoints verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: RoleBinding metadata: name: nginx-ingress-role-nisa-binding namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: nginx-ingress-role subjects: - kind: ServiceAccount name: nginx-ingress-serviceaccount namespace: ingress-nginx --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: nginx-ingress-clusterrole-nisa-binding labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: nginx-ingress-clusterrole subjects: - kind: ServiceAccount name: nginx-ingress-serviceaccount namespace: ingress-nginx --- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: nginx-ingress-controller namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: #replicas: 1 selector: matchLabels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx updateStrategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx annotations: prometheus.io/port: "10254" prometheus.io/scrape: "true" spec: serviceAccountName: nginx-ingress-serviceaccount hostNetwork: true containers: - name: nginx-ingress-controller image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0 args: - /nginx-ingress-controller - --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 securityContext: allowPrivilegeEscalation: true capabilities: drop: - ALL add: - NET_BIND_SERVICE # www-data -> 33 runAsUser: 33 env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace ports: - name: http containerPort: 80 - name: https containerPort: 443 livenessProbe: failureThreshold: 3 HTTPGET: パス:/ healthz ポート:10254 スキーム:HTTP initialDelaySeconds:10 periodSeconds:10 successThreshold:1 timeoutSecondsの:1 readinessProbe: failureThreshold:3 HTTPGET: パス:/ healthzの ポート:10254 スキーム:HTTP periodSeconds:10 successThreshold:1 timeoutSecondsの:1 ---
kubectlがインストールされて使用してください。
あなたが任意のノードK8Sドメインへのデフォルトの入力のアクセスを解決した場合は、直接ログインするには、デフォルトのアカウントとパスワードを使用します。