- 一般的なKubernetesコマンド
- GitLab固有のKubernetes情報
- MacOSでminikubeを使ったGitLab最小設定のインストール
toolboxポッドの Rails コードにパッチを適用します。
Kubernetesチートシート
GitLabサポートチームがトラブルシューティング中に使用することのある、Kubernetesに関する便利な情報のリストです。GitLabでは、サポートチームが収集した知識を誰でも活用できるように、これを公開しています。
もしあなたが有料ティアにいて、これらのコマンドの使い方がわからない場合は、サポートに連絡するのがベストです。
一般的なKubernetesコマンド
-
GCPプロジェクトへの作成者認証方法(異なるGCPアカウントでプロジェクトがある場合に特に役立ちます):
gcloud auth login -
Kubernetesダッシュボードへのアクセス方法:
# for minikube: minikube dashboard —url # for non-local installations if access via Kubectl is configured: kubectl proxy -
KubernetesノードにSSH接続してコンテナにrootで入る方法https://github.com/kubernetes/kubernetes/issues/30656 :
- GCPの場合は、ノード名を検索して、
gcloud compute ssh node-name。 -
docker psを使用してコンテナを一覧表示します。 -
docker exec --user root -ti container-id bashを使ってコンテナを入力。
- GCPの場合は、ノード名を検索して、
-
ローカルマシンからポッドにファイルをコピーする方法:
kubectl cp file-name pod-name:./destination-path -
CrashLoopBackoff状態のポッドをどうするか:- Kubernetesダッシュボードでログを確認。
-
Kubectlでログを確認します:
kubectl logs <webservice pod> -c dependencies
-
Kubernetesクラスタのすべてのイベントをリアルタイムで追跡する方法:
kubectl get events -w --all-namespaces -
以前に終了したポッドインスタンスのログを取得する方法:
kubectl logs <pod-name> --previousコンテナ/ポッド自体にはログは残りません。全ては
stdoutに書き込まれます。 これはKubernetesの原則で、詳細はTwelve-factor appをお読みください。 -
クラスターでcronジョブを設定する方法
kubectl get cronjobscronベースのバックアップを設定すると、ここに新しいスケジュールが表示されます。スケジュールに関する詳細はRunning Automated Tasks with a CronJobに記載されています。
GitLab固有のKubernetes情報
-
Kubernetes Helm Chartのテストに使用できる最小限の設定。
-
別ポッドのログをテーリングします。
webserviceポッドの例:kubectl logs gitlab-webservice-54fbf6698b-hpckq -c webservice -
ラベル (この場合は
webservice) を共有するすべてのポッドを追跡します:# all containers in the webservice pods kubectl logs -f -l app=webservice --all-containers=true --max-log-requests=50 # only the webservice containers in all webservice pods kubectl logs -f -l app=webservice -c webservice --max-log-requests=50 -
Linux のパッケージインストールにおけるコマンド
gitlab-ctl tailのように、すべてのコンテナからログを一度にストリームできます:kubectl logs -f -l release=gitlab --all-containers=true --max-log-requests=100 -
gitlab名前空間内のすべてのイベントをチェックします(デプロイ時に別の名前空間を指定した場合は、名前空間名が異なる可能性があります):kubectl get events -w --namespace=gitlab -
GitLabの便利なツール(コンソール、Rakeタスクなど)のほとんどはtoolboxポッドにあります。この中に入ってコマンドを実行することも、外から実行することもできます。
task-runnerポッドはGitLab 14.2(チャート5.2)でtoolboxに改名されました。# find the pod kubectl --namespace gitlab get pods -lapp=toolbox # enter it kubectl exec -it <toolbox-pod-name> -- bash # open rails console # rails console can be also called from other GitLab pods /srv/gitlab/bin/rails console # source-style commands should also work cd /srv/gitlab && bundle exec rake gitlab:check RAILS_ENV=production # run GitLab check. The output can be confusing and invalid because of the specific structure of GitLab installed via helm chart /usr/local/bin/gitlab-rake gitlab:check # open console without entering pod kubectl exec -it <toolbox-pod-name> -- /srv/gitlab/bin/rails console # check the status of DB migrations kubectl exec -it <toolbox-pod-name> -- /usr/local/bin/gitlab-rake db:migrate:status/usr/local/bin/gitlab-rakeの代わりにgitlab-rakeを使うこともできます。 -
インフラストラクチャーのトラブルシューティング> Kubernetesクラスターのインテグレーション:
-
kubectl get events -w --all-namespacesの出力を確認してください。 -
gitlab-managed-apps名前空間内のポッドのログを確認します。 - GitLab側ではSidekiqのログとKubernetesのログを確認します。GitLab が Helm chart 経由でインストールされている場合、
kubernetes.logは Sidekiq pod 内にあります。
-
-
初期管理者パスワードの取得方法https://docs.gitlab.com/charts/installation/deployment.html#initial-login :
# find the name of the secret containing the password kubectl get secrets | grep initial-root # decode it kubectl get secret <secret-name> -ojsonpath={.data.password} | base64 --decode ; echo -
GitLabのPostgreSQLデータベースに接続する方法。
task-runnerポッドはGitLab 14.2(チャート5.2)でtoolboxに改名されました。GitLab 14.2 (chart 5.2)以降では:
kubectl exec -it <toolbox-pod-name> -- /srv/gitlab/bin/rails dbconsole --include-password --database mainGitLab 14.1(チャート5.1)以前の場合:
kubectl exec -it <task-runner-pod-name> -- /srv/gitlab/bin/rails dbconsole --include-password -
Helmのインストール状況に関する情報を取得する方法:
helm status name-of-installation -
Helmチャートを使ってインストールされているGitLabを更新する方法:
helm repo update # get current values and redirect them to yaml file (analogue of gitlab.rb values) helm get values <release name> > gitlab.yaml # run upgrade itself helm upgrade <release name> <chart path> -f gitlab.yamlHelmチャートを使ったGitLabのアップデートも参照してください。
-
GitLab 設定に変更を適用する方法:
-
gitlab.yamlファイルを変更します。 -
以下のコマンドを実行して変更を適用します:
helm upgrade <release name> <chart path> -f gitlab.yaml
-
-
リリースのマニフェストを取得する方法。マニフェストには、すべてのKubernetesリソースと依存するChartに関する情報が含まれているので便利です:
helm get manifest <release name>
MacOSでminikubeを使ったGitLab最小設定のインストール
このセクションはDeveloping for Kubernetes with minikubeandHelmに基づいています。詳細はこれらのドキュメントを参照してください。
-
Homebrew経由でKubectlをインストールします:
brew install kubernetes-cli -
Homebrew経由でminikubeをインストールします:
brew cask install minikube -
minikubeを起動して設定します。minikubeが起動できない場合は、
minikube delete && minikube start:minikube start --cpus 3 --memory 8192 # minimum amount for GitLab to work minikube addons enable ingress -
Homebrew経由でHelmをインストールし、初期化します:
brew install helm -
minikubeの最小値YAMLファイルをワークステーションにコピーします:
curl --output values.yaml "https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube-minimum.yaml" -
minikube ipの出力から IP アドレスを見つけ、この IP アドレスで YAML ファイルを更新します。 -
GitLab Helmチャートをインストールします:
helm repo add gitlab https://charts.gitlab.io helm install gitlab -f <path-to-yaml-file> gitlab/gitlabGitLabの設定をいくつか変更したい場合は、上記の設定をベースにして独自のYAMLファイルを作成することができます。
-
helm status gitlabとminikube dashboardを使ってインストールの進捗を監視しましょう。インストールには、ワークステーションのリソース量にもよりますが、20~30分ほどかかります。 -
すべてのポッドが
RunningまたはCompletedのステータスを示したら、初期ログインで説明したように GitLab のパスワードを取得して、UI から GitLab にログインします。https://gitlab.domainからアクセスできるようになります。domainは YAML ファイルで提供された値です。
toolbox ポッドの Rails コードにパッチを適用します。
GitLabのサービスポッドにパッチを適用するには、変更したソースコードを含む新しいイメージをビルドする必要があります。これらは直接パッチを当てることは_できません_。toolbox /task-runner ポッド には、他の通常のサービスオペレーションを妨げることなく、Rails ベースのポッドとして動作するために必要なものがすべて入っています。独立したタスクを実行したり、いくつかのタスクを実行するために一時的にソースコードを変更したりするのに使うことができます。
toolbox ポッドを使って変更を加えた場合、ポッドを再起動してもその変更は永続化されません。コンテナのオペレーションが続く間だけ存在します。toolbox ポッドのソースコードにパッチを適用するには:
-
適用したい
.patchファイルを取得します:- マージリクエストの差分をパッチファイルとして直接ダウンロードします。
-
または、
curlを使って直接 diff を取得してください。以下の<mr_iid>をマージリクエストの IID に置き換えるか、URLを生のスニペットを指すように変更してください:curl --output ~/<mr_iid>.patch "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/<mr_iid>.patch"
-
toolboxポッド上の内部ファイルにパッチを適用します:cd /srv/gitlab busybox patch -p1 -f < ~/<mr_iid>.patch