0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WebARENA Indigo APIでVPSを作って、サーバーレス(k3s + Knative)を自動構築する

0
Posted at

この記事は、以下のQiita記事と同じ流れで説明を進めます(Indigo APIの“クセ”も継承)。
WebARENA Indigo APIでVPSを作る(curl/Python+cloud-init)

  • Indigo API の基本(アクセストークン取得→VM作成→起動→IP取得)
  • cloud-init を起動時に渡せないVM作成直後は Stop 状態
  • API 呼び出し回数制限が厳しいため sleep を長めにし、ループ回数を抑制

以降のBashは実機で複数回動作確認済みです。お客様環境では3変数だけ差し替えれば、そのまま動くはずです。


これは何をする?

  • Indigo API で VPS(Ubuntu 24.04)を作成
  • 起動 → グローバルIP 取得
  • SSH 経由で NoCloud seed(meta-data/user-data)を配置して再起動
  • 再起動時の cloud-init で k3s + Knative(Kourier + sslip.io)を自動構築
  • サンプルの Knative Service(helloworld-go)をデプロイして URL にアクセス

前提

  • ローカル(Mac or Linux)に bash, curl, jq, ssh, scp, ssh-keygen があること

    • macOS: brew install curl jq openssh
    • Ubuntu: sudo apt -y install curl jq openssh-client
  • Indigo で **事前に公開鍵登録(SSH Key)**を作成済み(本稿の例では SSH_KEY_ID を指定)

  • この記事のスクリプトでは以下を利用

    • Region: 1(例: 東京)
    • OS: 25(例: Ubuntu 24.04)
    • Plan: 4(例: 3vCPU/4GB以上を推奨)

まずは 3 変数だけ設定

# ★お客様環境に合わせて差し替え(例)
export INDIGO_CLIENT_ID="お客様環境に合わせて差し替え"
export INDIGO_CLIENT_SECRET="お客様環境に合わせて差し替え"
export SSH_PRIVATE_KEY_PATH="お客様環境に合わせて差し替え"

このキーのことが解らない時は、この記事を見てください
WebARENA Indigo APIでVPSを作る(curl/Python+cloud-init)

そのほか(任意): INDIGO_INSTANCE_NAME(既定: indigo-k3s-knative)、INDIGO_REGION_IDINDIGO_OS_IDINDIGO_INSTANCE_PLANINDIGO_SSH_KEY_ID などはスクリプト先頭で変更可能です。

実行ファイルの入手と実行

本稿のBashはAPI呼び出し回数制限に配慮しており、sleep を長めに入れています。必要に応じて調整してください。

  1. Bashファイルを古スクリプトをダウンロード、名前をつけて保存。
  2. 実行権限を付与して実行
chmod +x ./indigo_knative_all.sh
./indigo_knative_all.sh

スクリプトの流れ

  1. アクセストークン取得(OAuth)

  2. VM作成(Qiita記事どおりの5キー: sshKeyId, regionId, osId, instancePlan, instanceNameを指定)

  3. 起動statusupdate: start)→ グローバルIP 取得待ち

    • API制限回避のため for ループに長めの sleep 40 を採用
  4. NoCloud seed/var/lib/cloud/seed/nocloud-net/)をSSHで配置 → 再起動

  5. cloud-init 完了待ち(タイムアウト30分)

  6. 念のための フォールバック導入(k3s/Knative を再適用)

  7. Knative サンプルghcr.io/knative/helloworld-go)を demo 名前空間にデプロイ

動作確認コマンド(手動)

ここまでで cloud-init により自動デプロイされていますが、手動でも確認できます。

# 1) ログイン
ssh -i 'お客様環境に合わせて差し替え' 'ubuntu'@'<取得したIP>' \
  -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

# 2) 名前空間の作成(存在する場合は無視)
kubectl create ns demo 2>/dev/null || true

# 3) hello をデプロイ
cat <<'YAML' | kubectl -n demo apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          env:
            - name: TARGET
              value: "Knative"
YAML

# 4) Ready待ち & URL取得 & 叩く
kubectl -n demo wait ksvc/hello --for=condition=Ready --timeout=600s
URL=$(kubectl -n demo get ksvc hello -o jsonpath='{.status.url}')
echo "$URL"
curl -i "$URL"

出力例:

HTTP/1.1 200 OK
...
Hello Knative!

補足: Kourier + sslip.io を使っているため、http://hello.demo.<外部IP>.sslip.ioブラウザからアクセスしても同じ結果が得られます。

よくある詰まりと対策

  • トークン取得が null → Client ID/Secret を確認。ネットワーク越しのプロキシやDNSも注意。
  • getinstancelist で IP が取れない → VMが Running になるまで待機。Loop時間全体を増やす。
  • SSH が開かない → Indigo側で statusupdate(stop→start) し直す/数分待って再実行。
  • cloud-init が完走しない → フォールバックステップが k3s+Knative を再適用します(ログを確認)。
  • ブラウザで開けないkubectl -n kourier-system get svc kourier -o wide で EXTERNAL-IP を確認し、serving-default-domain.yaml(sslip.io)の適用を再チェック。

付録:フルスクリプト

※sleep 値や OS/Plan/Region/SSH Key ID は環境に合わせて調整してください。

#!/usr/bin/env bash
set -euo pipefail

# ==== 設定(必要に応じて編集 or 環境変数で上書き)====
INDIGO_OAUTH_URL="${INDIGO_OAUTH_URL:-https://api.customer.jp/oauth/v1/accesstokens}"
INDIGO_API_BASE="${INDIGO_API_BASE:-https://api.customer.jp/webarenaIndigo/v1}"

INDIGO_CLIENT_ID="お客様環境に合わせて差し替え""
INDIGO_CLIENT_SECRET="お客様環境に合わせて差し替え""

INDIGO_REGION_ID="1"       # 例: 東京
INDIGO_OS_ID="25"               # 例: Ubuntu 24.04
INDIGO_INSTANCE_PLAN="4"  # 例: 3vCPU/4GB以上を推奨
INDIGO_SSH_KEY_ID="9728"
INDIGO_INSTANCE_NAME="${INDIGO_INSTANCE_NAME:-indigo-k3s-knative}"

SSH_USER="${SSH_USER:-ubuntu}"
SSH_PRIVATE_KEY_PATH="お客様環境に合わせて差し替え""

# Knative リリースタグ(必要なら更新)
KNATIVE_VERSION="${KNATIVE_VERSION:-knative-v1.19.0}"

############################################
# ユーティリティ
############################################
need(){ command -v "$1" >/dev/null 2>&1 || { echo "ERROR: $1 が必要です"; exit 1; }; }
need curl; need jq; need ssh; need scp; need ssh-keygen

require_num(){ local n="$1" v="$2"; [[ -n "$v" && "$v" =~ ^[0-9]+$ ]] || { echo "ERROR: $n='$v'"; exit 1; }; }
require_set(){ local n="$1" v="$2"; [[ -n "$v" && ! "$v" =~ __PUT_ ]] || { echo "ERROR: $n 未設定"; exit 1; }; }

api_post_json(){
  # -sS(静か+エラー詳細)。HTTP4xxでもJSONを見たいので -f は付けない
  local url="$1" data="$2" token="${3-}"
  if [[ -n "$token" ]]; then
    curl -sS -X POST "$url" -H 'Content-Type: application/json' -H "Authorization: Bearer $token" -d "$data"
  else
    curl -sS -X POST "$url" -H 'Content-Type: application/json' -d "$data"
  fi
}
api_get(){ curl -sS -X GET "$1" -H "Authorization: Bearer $2"; }

############################################
# 前提チェック
############################################
require_set  INDIGO_CLIENT_ID       "$INDIGO_CLIENT_ID"
require_set  INDIGO_CLIENT_SECRET   "$INDIGO_CLIENT_SECRET"
require_num  INDIGO_REGION_ID       "$INDIGO_REGION_ID"
require_num  INDIGO_OS_ID           "$INDIGO_OS_ID"
require_num  INDIGO_INSTANCE_PLAN   "$INDIGO_INSTANCE_PLAN"
require_num  INDIGO_SSH_KEY_ID      "$INDIGO_SSH_KEY_ID"
require_set  INDIGO_INSTANCE_NAME   "$INDIGO_INSTANCE_NAME"

############################################
# 0) アクセストークン取得
############################################
echo "== Get access token =="
TOKEN="$(api_post_json "$INDIGO_OAUTH_URL" "$(jq -n \
  --arg id "$INDIGO_CLIENT_ID" --arg sec "$INDIGO_CLIENT_SECRET" \
  '{grantType:"client_credentials", clientId:$id, clientSecret:$sec, code:""}')" \
  | jq -r '.accessToken')"
[[ -n "$TOKEN" && "$TOKEN" != "null" ]] || { echo "トークン取得失敗"; exit 1; }

############################################
# 1) VM作成(記事どおり5キー)
############################################
echo "== Create instance (Qiita記事どおりの5キー) =="
CREATE_JSON="$(api_post_json "${INDIGO_API_BASE}/vm/createinstance" "$(jq -n \
  --argjson sshKeyId     "$INDIGO_SSH_KEY_ID" \
  --argjson regionId     "$INDIGO_REGION_ID" \
  --argjson osId         "$INDIGO_OS_ID" \
  --argjson instancePlan "$INDIGO_INSTANCE_PLAN" \
  --arg     instanceName "$INDIGO_INSTANCE_NAME" \
  '{sshKeyId:$sshKeyId, regionId:$regionId, osId:$osId, instancePlan:$instancePlan, instanceName:$instanceName}')" "$TOKEN" || true)"
echo "$CREATE_JSON" > /tmp/indigo_create.json
sleep 90
# 応答から id/instanceId を拾う。無ければ一覧から「名前で」逆引き
INSTANCE_ID="$(jq -r '(.instanceId // .id // .data.instanceId // .data.id // empty)' /tmp/indigo_create.json)"
if [[ -z "$INSTANCE_ID" ]]; then
  echo "create 応答に id なし→一覧から名前で逆引き…"
  sleep 2
  LIST_JSON="$(api_get "${INDIGO_API_BASE}/vm/getinstancelist" "$TOKEN")"
  INSTANCE_ID="$(echo "$LIST_JSON" | jq -r --arg name "$INDIGO_INSTANCE_NAME" '
    .[] | select((.instance_name|tostring|gsub("\\s+$";"")|ascii_downcase)
                 == ($name|gsub("\\s+$";"")|ascii_downcase))
    | .id' | head -n1)"
fi
[[ -n "$INSTANCE_ID" ]] || { echo "instanceId取得失敗。/tmp/indigo_create.json を確認してください"; exit 1; }
echo "INSTANCE_ID=$INSTANCE_ID"
sleep 30
############################################
# 2) 起動 → 3) IP取得
############################################
echo "== Start instance (statusupdate) =="
api_post_json "${INDIGO_API_BASE}/vm/instance/statusupdate" \
  "$(jq -n --arg id "$INSTANCE_ID" '{instanceId:$id,status:"start"}')" "$TOKEN" >/dev/null

echo "== Wait for IP (getinstancelist) =="
IP=""
sleep 120
for _ in $(seq 1 120); do #沢山APIを叩くと回数制限に引っ掛かるのでLoop回数を制限するsleep5→40
  RESP="$(api_get "${INDIGO_API_BASE}/vm/getinstancelist" "$TOKEN" || echo "[]")"
  IP="$(echo "$RESP" | jq -r --arg id "$INSTANCE_ID" '
    if type=="array" then
      .[] | select((.id|tostring)==$id and .instancestatus=="Running") | (.ip // .ipaddress // empty)
    else
      empty
    end
  ' | head -n1)"
  [[ -n "$IP" ]] && break
  sleep 40
done
[[ -n "${IP:-}" ]] || { echo "IP取得失敗"; echo "$RESP" | head -c 400; exit 1; }
echo "IP=$IP"

# 既存 known_hosts の該当IP鍵を掃除(手動SSHの衝突を避ける)
ssh-keygen -R "$IP" >/dev/null 2>&1 || true
ssh-keygen -R "[$IP]:22" >/dev/null 2>&1 || true
if [[ -f "$HOME/.ssh/known_hosts" ]]; then
  grep -v -F "$IP" "$HOME/.ssh/known_hosts" > "$HOME/.ssh/known_hosts.tmp" 2>/dev/null || true
  mv "$HOME/.ssh/known_hosts.tmp" "$HOME/.ssh/known_hosts" 2>/dev/null || true
fi

############################################
# 4) NoCloud seed + user-data 生成(公開鍵を埋め込む)
############################################
echo "== Prepare user-data with your public key =="
PUBKEY_FILE="${SSH_PRIVATE_KEY_PATH}.pub"
if [[ -f "$PUBKEY_FILE" ]]; then
  PUBKEY="$(cat "$PUBKEY_FILE")"
else
  PUBKEY="$(ssh-keygen -y -f "$SSH_PRIVATE_KEY_PATH")"
fi

USERDATA="$(mktemp)"
cat >"$USERDATA" <<YAML
#cloud-config
package_update: true
package_upgrade: false
timezone: Asia/Tokyo
ssh_authorized_keys:
  - ${PUBKEY}
packages: [curl, jq]

runcmd:
  - [ bash, -lc, 'curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--write-kubeconfig-mode 644 --disable traefik" sh -' ]
  - [ bash, -lc, 'sleep 15' ]
  - [ bash, -lc, 'kubectl get nodes -o wide' ]

  # Knative Serving (CRDs/Core)
  - [ bash, -lc, 'KN_VER="'"$KNATIVE_VERSION"'"; kubectl apply -f https://github.com/knative/serving/releases/download/\${KN_VER}/serving-crds.yaml; kubectl apply -f https://github.com/knative/serving/releases/download/\${KN_VER}/serving-core.yaml' ]

  # Kourier
  - [ bash, -lc, 'KN_VER="'"$KNATIVE_VERSION"'"; kubectl apply -f https://github.com/knative/net-kourier/releases/download/\${KN_VER}/kourier.yaml' ]
  - [ bash, -lc, 'kubectl -n knative-serving get cm config-network -o json | jq '\''.data["ingress-class"]="kourier.ingress.networking.knative.dev"'\'' | kubectl apply -f -' ]

  # Magic DNS (sslip.io)
  - [ bash, -lc, 'KN_VER="'"$KNATIVE_VERSION"'"; kubectl apply -f https://github.com/knative/serving/releases/download/\${KN_VER}/serving-default-domain.yaml' ]

  # 待機とサンプル
  - [ bash, -lc, 'kubectl -n knative-serving wait deploy --all --for=condition=Available --timeout=600s' ]
  - [ bash, -lc, 'kubectl -n kourier-system get svc kourier -o wide' ]
  - [ bash, -lc, 'kubectl create ns demo || true' ]
  - [ bash, -lc, 'cat <<EOF | kubectl -n demo apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata: { name: hello }
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          env: [{ name: TARGET, value: "World" }]
EOF' ]
  - [ bash, -lc, 'kubectl -n demo wait ksvc/hello --for=condition=Ready --timeout=600s || true' ]

final_message: "Knative on k3s provisioned via cloud-init."
YAML

############################################
# 5) seed 配置 → 再起動(ブート時に cloud-init 実行)
############################################
echo "== Wait for initial SSH availability =="
SSH_READY=0
for i in $(seq 1 180); do
  if ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
        -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
        -o PasswordAuthentication=no -o IdentitiesOnly=yes \
        -o BatchMode=yes -o ConnectTimeout=5 \
        -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" 'true' 2>/dev/null; then
    SSH_READY=1
    echo "SSH is reachable."
    break
  fi
  sleep 5
done
if [[ $SSH_READY -ne 1 ]]; then
  echo "SSHが開かないままタイムアウト(${IP}:22)。VMのsshd初期化が遅延しています。"
  echo "数分おいて再実行するか、Indigoのstatusupdate(stop→start)でリトライしてください。"
  exit 1
fi

echo "== Push seed & reboot =="
scp -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
    -o PasswordAuthentication=no -o IdentitiesOnly=yes \
    -i "$SSH_PRIVATE_KEY_PATH" "$USERDATA" "${SSH_USER}@${IP}:/tmp/user-data.kn.yaml"
rm -f "$USERDATA"

ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
    -o PasswordAuthentication=no -o IdentitiesOnly=yes \
    -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" 'sudo bash -s' <<'EOS'
set -euo pipefail
sudo tee /etc/cloud/cloud.cfg.d/90_nocloud_seed.cfg >/dev/null <<'EOF'
datasource_list: [ NoCloud ]
datasource:
  NoCloud:
    seedfrom: /var/lib/cloud/seed/nocloud-net/
EOF
sudo mkdir -p /var/lib/cloud/seed/nocloud-net
sudo tee /var/lib/cloud/seed/nocloud-net/meta-data >/dev/null <<EOF
instance-id: iid-$(uuidgen)
local-hostname: $HOSTNAME
EOF
sudo mv /tmp/user-data.kn.yaml /var/lib/cloud/seed/nocloud-net/user-data
sudo cloud-init clean || true
sudo systemctl reboot
EOS

echo "== Reboot issued. Waiting for SSH to come back =="
SSH_BACK=0
for _ in $(seq 1 120); do
  if ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
        -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
        -o PasswordAuthentication=no -o IdentitiesOnly=yes \
        -o ConnectTimeout=5 \
        -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" 'true' 2>/dev/null; then
    SSH_BACK=1; echo "SSH is back."; break
  fi
  sleep 5
done
if [[ $SSH_BACK -eq 0 ]]; then
  echo "SSH復帰待ちタイムアウト"; exit 1
fi

############################################
# 6) cloud-init 完了待ち & 動作確認(リトライ式)
############################################

echo "== Wait for cloud-init to finish (robust) =="
deadline=$((SECONDS + 1800))  # 30分
finished=0
while (( SECONDS < deadline )); do
  if ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
        -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
        -o PasswordAuthentication=no -o IdentitiesOnly=yes \
        -o ConnectTimeout=5 \
        -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" \
        'sudo cloud-init status 2>/dev/null | grep -q "status: done" && test -f /var/lib/cloud/instance/boot-finished'; then
    echo "cloud-init finished."
    finished=1; break
  fi
  sleep 10
done

# ---- フォールバック: kubectl が無ければ k3s+Knative をSSH経由で導入 ----
echo "== Ensure k3s + Knative present (fallback) =="
echo "== Ensure k3s + Knative present (fallback) =="

# 鍵の存在チェック(@ 誤展開対策)
if [[ ! -f "$SSH_PRIVATE_KEY_PATH" ]]; then
  echo "ERROR: SSH_PRIVATE_KEY_PATH='$SSH_PRIVATE_KEY_PATH' が見つかりません"; exit 1
fi

# リモートで実行する内容を一時ファイルに作成
REMOTE_SCRIPT="$(mktemp)"
cat >"$REMOTE_SCRIPT" <<'RS'
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive

# 1) k3s が無ければ導入
if ! command -v kubectl >/dev/null 2>&1; then
  curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--write-kubeconfig-mode 644 --disable traefik" sh -
  mkdir -p ~/.kube
  sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
  sudo chown $USER:$USER ~/.kube/config
fi

# 2) Knative + Kourier
KN_VER="__KN_VER_PLACEHOLDER__"
kubectl apply -f https://github.com/knative/serving/releases/download/${KN_VER}/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/${KN_VER}/serving-core.yaml
kubectl apply -f https://github.com/knative/net-kourier/releases/download/${KN_VER}/kourier.yaml

# 3) Kourier を ingress に指定(get→jq→apply で確実)
command -v jq >/dev/null 2>&1 || { sudo apt-get update -y && sudo apt-get install -y jq; }
kubectl -n knative-serving get cm config-network -o json \
  | jq '.data["ingress-class"]="kourier.ingress.networking.knative.dev"' \
  | kubectl apply -f -

# 4) デフォルトドメイン(sslip.io) & 待機
kubectl apply -f https://github.com/knative/serving/releases/download/${KN_VER}/serving-default-domain.yaml
kubectl -n knative-serving wait deploy --all --for=condition=Available --timeout=600s || true
kubectl -n kourier-system  wait deploy --all --for=condition=Available --timeout=600s || true

# 5) サンプル(存在しなければ作成)
kubectl create ns demo 2>/dev/null || true
kubectl -n demo get ksvc hello >/dev/null 2>&1 || cat <<'YAML' | kubectl -n demo apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata: { name: hello }
spec:
  template:
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          env: [{ name: TARGET, value: "World" }]
YAML

# 6) 確認
kubectl -n demo wait ksvc/hello --for=condition=Ready --timeout=600s || true
kubectl get nodes -o wide
kubectl -n knative-serving get pods
kubectl -n demo get ksvc hello -o wide
RS

# KN_VER を埋め込み
sed -i.bak "s/__KN_VER_PLACEHOLDER__/${KNATIVE_VERSION}/g" "$REMOTE_SCRIPT"

# 配布→実行
scp -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
    -o PasswordAuthentication=no -o IdentitiesOnly=yes \
    -i "$SSH_PRIVATE_KEY_PATH" "$REMOTE_SCRIPT" "${SSH_USER}@${IP}:/tmp/post_knative.sh"
rm -f "$REMOTE_SCRIPT"

ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
    -o PasswordAuthentication=no -o IdentitiesOnly=yes \
    -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" 'sudo bash /tmp/post_knative.sh'

echo "== Verify =="
ssh -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey \
    -o PasswordAuthentication=no -o IdentitiesOnly=yes \
    -i "$SSH_PRIVATE_KEY_PATH" "${SSH_USER}@${IP}" \
    'bash -lc "kubectl get nodes -o wide; echo; kubectl -n knative-serving get pods; echo; kubectl -n demo get ksvc hello -o wide"'

echo
echo "=== 完了 ==="
echo "INSTANCE_ID=${INSTANCE_ID}"
echo "IP=${IP}"
echo "ログイン例: ssh -i '"$SSH_PRIVATE_KEY_PATH"' '"$SSH_USER"'@'"$IP"' -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

まとめ

  • 3変数INDIGO_CLIENT_ID, INDIGO_CLIENT_SECRET, SSH_PRIVATE_KEY_PATH)をセット
  • スクリプトを実行 → k3s + Knative が自動構築
  • kubectl get ksvc -n demo hello -o jsonpath='{.status.url}' の URL またはブラウザアクセスで “Hello Knative!” を確認

免責

  • 認証情報の取り扱いは自己責任でお願いします。公開・共有後は再発行を推奨します。
  • Indigo APIやイメージの仕様変更により動作が変わる可能性があります。最新のドキュメントを併せてご確認ください。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?