コンテンツへスキップ

仕事でGoogle Cloudを触っていますが情報が散らばっているのでまとめてみます。

学習用コンテンツや情報収集のためのリンク集です。定期的にメンテ予定。

... "Google Cloud学習用コンテンツ及び関連サービスまとめ" を続けて読む

Ubuntu 22.04の環境でapt-get update 時、下記のメッセージが出てアップデートが出来なくなりました。

Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

Debianの場合は下記のエラーメッセージが出るようです。

Warning: apt-key output should not be parsed (stdout is not a terminal)

apt-key コマンドが非推奨になり、キーの追加方法が変わっていました。過去にapt-key addで追加した分は再度やり直す必要があります。

ウチのサーバの場合はJenkins、Docker、Kubernetesの3つです。

それぞれ公式ページに行くと修正されています。Kubernetesについては日本語版のページは未対応で、英語版のみ修正済みでした。

昔はこんな感じ(Jenkins)

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

エラーが出ている環境では下記のように鍵の追加を再実行します。

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
    /usr/share/keyrings/jenkins-keyring.asc > /dev/null

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null

Kubernetes

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockerは過去の設定と重複しているとのエラーが出たので、一緒に記載しておきます。

W: Target Packages (stable/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1
W: Target Packages (stable/binary-all/Packages) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1
W: Target Translations (stable/i18n/Translation-en) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1
W: Target Packages (stable/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1
W: Target Packages (stable/binary-all/Packages) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1
W: Target Translations (stable/i18n/Translation-en) is configured multiple times in /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list:1 and /etc/apt/sources.list.d/docker.list:1

lsで確認

$ ls -la /etc/apt/sources.list.d/
total 20
drwxr-xr-x 2 root root 4096 Sep 11 16:40 .
drwxr-xr-x 8 root root 4096 Apr 24 02:14 ..
-rw-r--r-- 1 root root  148 Apr 24 01:40 archive_uri-https_download_docker_com_linux_ubuntu-jammy.list
-rw-r--r-- 1 root root  112 Sep 11 16:40 docker.list
-rw-r--r-- 1 root root  117 Sep 11 16:37 kubernetes.list

docker.listが新規追加した分なので、過去分は削除します。

sudo rm -rf /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list

参考

Packerを使ってCompute Engineのマシンイメージを作成し、Google Cloud上のプロジェクトに保存する方法です。

... "Packerを使ってGCEのマシンイメージを作成する" を続けて読む

今回の環境

Ubuntu 21.04 192.168.10.211 ControlPlane 2vCPU 3GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.212 WorkerNode 1vCPU 1GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.213 WorkerNode 2vCPU 2GBメモリ 16GB SSD

Kubernetes のバージョンは1.22です。

VMWare ESXi 6.7U2上に構築しています。
スペックはわざとバラバラにしてみました。ちょっとケチりすぎたかも。

基本的に公式ドキュメントに沿って作業していきます。

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

nftablesではなくiptablesを使うよう変更

# レガシーバイナリがインストールされていることを確認してください
sudo apt-get install -y iptables arptables ebtables

# レガシーバージョンに切り替えてください。
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy

Dockerをインストール

https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/

HTTPS越しのリポジトリの使用をaptに許可するために、パッケージをインストール

sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2

Docker公式のGPG鍵を追加

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Dockerのaptレポジトリを追加

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

 

バージョン指定が利かなかったので外しています

sudo apt-get update && sudo apt-get install -y \
containerd.io \
docker-ce \ docker-ce-cli

デーモンをセットアップ

sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
※Permission Deniedでファイルが出来なければsudo viで普通に作る
sudo mkdir -p /etc/systemd/system/docker.service.d

dockerを再起動

sudo systemctl daemon-reload
sudo systemctl restart docker

kubeadm、kubelet、kubectlのインストール

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#kubeadm-kubelet-kubectl%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

sudo apt-get update && sudo apt-get upgrade

swapを無効に

sudo swapoff -a

再起動したとき元に戻らないよう、swap.imgをコメントアウト

sudo vi /etc/fstab

#swap.img none swap sw 0 0

Project CalicoをKubernetesで使ってみる:構築編 を参考にkubeadmの操作

sudo kubeadm init --apiserver-advertise-address=192.168.10.211 --pod-network-cidr=192.168.0.0/16

CNI(Container Network Interface)はCalicoを使う予定で、--pod-network-cidr で指定しているIPアドレス範囲は、CALICO_IPV4POOL_CIDRの値に合わせています。

https://docs.projectcalico.org/reference/node/configuration

Your Kubernetes control-plane has initialized successfully! のあとに、クラスタに参加させるためのkubeadmコマンドが表示されます。

kubeadm join 192.168.10.211:6443 --token ********************* \
--discovery-token-ca-cert-hash sha256:***************************************************************
kubectlをroot以外のユーザーでも実行できるように
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

他2台のWorkerNodeでもswapの無効化とkubeadm join ~を実行してクラスタに参加させます。

CNIのインストールを行います。

Installing Addonsのページでは大量に紹介されているのですが、前述の通りCalicoを選択。
Google Cloud のGKEでもCalicoを使っているらしく、似た環境にしたいためです。

CalicoQuickStartを参考に。

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

tigera-operator.yaml をkubectl createすると実行はできますが、下記のWarningが出ます。

Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

Kubernetes1.21以降PodSecurityPolicyは非推奨で、1.25から正式に廃止されるとのこと。
ちなみに、policy/v1ではPodSecurityPolicyは存在しません。
PodSecurityPolicyの置き換えは議論中らしいのでそのまま使うことに。

上のふたつのyamlをcreateしてからPodの様子を見てみます。

$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
alico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h

STATUSがすべてRunningになっていたらOK

Nodeの様子も確認します。

$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
calico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h

もしNotReadyになっていたらkubectl describe nodesやsystemctl status kubectlで何が起きているか確認し、トラブルシュートしていきます。

 

Google Cloudを使ったアプリケーション開発において、「簡単にデプロイされているアプリのバージョンを確認したい」という要望があったので、gitのCommit IDやpushしたタグをコンテナに詰める方法をメモっておきます。

なお、メインはCloud Buildのため、Cloud RunとSource Repogitriesについては省略しています。

ディレクトリ構成

┣cloudbuild
┃┗cloudbuild.yaml
┗container
 ┣Dockerfile
 ┗html
  ┗index.html

cloudbuild/cloudbuild.yamlの中身(の一部)

steps:
  - name: gcr.io/cloud-builders/docker
    args:
      - build
      - '--no-cache'
      - '-t'
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - container
      - '-f'
      - container/Dockerfile
      - '--build-arg'
      - COMMIT_SHA=$COMMIT_SHA
      - '--build-arg'
      - TAG_NAME=$TAG_NAME
    id: Build
    (長いので以下略/Cloud RunをWebコンソールから作ったときに作成されるものと同じ)

container/Dockerfile の中身

FROM nginx

COPY ./html /usr/share/nginx/html

ARG COMMIT_SHA
ARG TAG_NAME

ENV COMMIT_SHA ${COMMIT_SHA:-local}
ENV TAG_NAME ${TAG_NAME:-local}

RUN echo ${COMMIT_SHA} > /usr/share/nginx/html/commit.txt
RUN echo ${TAG_NAME} > /usr/share/nginx/html/tag.txt

--build-arg を使ってCOMMIT_SHAとTAG_NAMEを渡します。

ビルド時にARGで受け取った後、環境変数に格納して公開ディレクトリのテキストファイルに書き出しています。

1.0.2のタグが付いたCommit IDが42e23d5のコミット

上記画像の場合、[URL]/commit.txtにアクセスすると、「42e23d574a162804813b1a5dee1da7cb8247f734」
[URL]/tag.txtにアクセスすると、「1.0.2」のテキストが表示されます。

OpenSSLのWikiからリンクされている下記のページからダウンロードします。

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)

普通に個人環境で実験するだけならWin64 OpenSSL Light EXE版で問題ありません。

Win64OpenSSL_Light-3_0_7.exe(3_0_7の箇所はバージョンが入るので、その時々によって異なります)を実行してインストーラを起動し、同意してNextを押して進みます。

 下記の画像のようにThe OpenSSL binaries (/bin) directoryを選び、「C:\Program Files\OpenSSL-Win64\bin」にopenssl.exeが配置されるようにします。

The OpenSSL binaries (/bin) directory を選択して次へ
設定を確認し、インストール

 

インストールが済んだらWindows Terminalかコマンドプロンプトを起動し、openssl versionしてみます。まだパスを通していないので、失敗します。

>openssl version
'openssl' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

そのまま下記コマンドを実行し、OpenSSLの実行ファイルのパスを通します。

set Path=%Path%;C:\Program Files\OpenSSL-Win64\bin

Pathを表示し、末尾に「C:\Program Files\OpenSSL-Win64\bin」が入っていることを確認します。

echo %Path%

再度openssl versionを実行し、正常に実行出来ることを確認します。

>openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)

もし失敗していた場合は一から手順を見直してください。
OpenSSLのバージョンが確認できたら次へ。

setコマンドは一時的な追加なので、最後にsetxで環境変数に保存します。

setx Path "%Path%"

以上で終わりです。

ちなみに、CUI(コマンド)ではなく、GUI(画面からポチポチ)する方法もあります。

Windowsキー+Rでファイル名を指定して実行から「rundll32 sysdm.cpl,EditEnvironmentVariables」を入力してOKを押します。

環境変数のウィンドウが表示されたらユーザー環境変数のPathの項目を選んで編集し、「環境変数名の編集」ウィンドウにある新規(N)から「C:\Program Files\OpenSSL-Win64\bin」を追加します。

ダウンロードとインストール

  1. ISCのダウンロードページからCurrent-Stableのところからダウンロード……は昔の話になってしまいました。
    過去バージョン置き場の Index of /isc/bind9/cur/9.16 から、BIND9.16.34.x64.zip をダウンロード
    ※9.16以降、Windows版バイナリは提供されないようです。
  2. BINDInstall.exe を管理者として実行し、インストーラを起動
  3. ディレクトリやオプション指定の画面では「Tools Only」にのみチェックを入れ、Installボタンを押し、インストール
  4. Visual C++ランタイムのインストールを求められる場合も同意してインストール

パスを通す

環境変数のPathにdig.exeのインストールディレクトリを追加するため、 ファイル名を指定して実行 (Windowsキー+R )画面に以下を入力する

rundll32 sysdm.cpl,EditEnvironmentVariables

C:\Program Files\ISC BIND 9\bin にインストールされているはずなので、ファイルを確認の上、Path に上記のパスを追加。

コマンドプロンプトからdigを実行できるか確認する。

Windows 10 用のリモート サーバー管理ツール
https://www.microsoft.com/ja-JP/download/details.aspx?id=45520

Windows 10(64bit) は WindowsTH-RSAT_WS_1803-x64.msu を選択

PowerShellを起動

whoami/fqdn

RSAT for Windows 10 で追加される機能 (ja-JP)
https://social.technet.microsoft.com/wiki/contents/articles/32010.rsat-for-windows-10-ja-jp.aspx
"Active Directory Module for Windows PowerShell"をインストールするのが目的

hoge(OU)に含まれるメンバー一覧を表示する

Get-ADGroupMember -Identity "hoge"