投稿者:熊谷

こんにちは。昼も寒くて震えております。

さて、K8sの軽量版として、K0sがOSSとしてリリースされました。
今回はそのK0sをGoogle Cloud Platform上のGCEで動かしてみます。

K0sとは

K0sはKubernetes(K8s)クラスターを簡単に構築できるように必要な項目が事前構成された包括的なKubernetesディストリビューションです。

公式URL

似たようにK8sの簡易版を構成できるminikubeもありますが、vboxやKVMの用意が必要だったりします。
また、同じように軽量なK8sとしてEdgeやIoT向けのK3sもあります。

環境準備

今回使用したOSはdebian-10-buster-v20201112です。(何も気にしないで選択していました)
その他のLinux OSでも、各種コマンドのインストール方法だけ読み替えれば実施できるかと思います。
GCEからのサーバ構築は非常に簡単なので、検証環境としてもおすすめです。

サーバが起動したあと、GCPコンソールで該当のサーバを探し、SSH コンソールを起動します。 (私は2つ立ち上げました)

choiceSSHonGCP

まず環境の準備として、kubectlコマンドを導入します。詳しくはこちらを参照

# ダウンロードと配置
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
#コマンド確認
kubectl version --client

そして肝心のK0sのダウンロードです。こちらはGithub参照です。

sudo sh -c "curl -sSLf get.k0s.sh | sh"

これだけです。非常に簡単。

K0sの起動

環境の準備が整ったところで、実際にK0sを起動していきます。 (Permissionで起こられるので、sudoで実施)

sudo k0s server --enable-worker

コンソールが流れていくので、先程開いた 別のSSHコンソールで作業をします。 (バックグラウンドで起動でも大丈だと思います)
稼働確認のため、kubectlコマンドを実施するのですが、予めadmin.confを変数に登録しておきます。 私の環境は検証したあとすぐサーバを削除するので、~/配下で作業していますが、適宜読み替えを実施してください。

sudo cp /var/lib/k0s/pki/admin.conf admin.conf
export KUBECONFIG=~/admin.conf

これで、kubectlをコンフィグ指定でしなくて良くなったので、K0sのNodeの起動を確認します。

kubectl get node

稼働確認で以下のコマンドを実施して、Nodeの起動を確認します。

NAME               STATUS   ROLES    AGE   VERSION
kumagai-k0s-tset   Ready    <none>   77m   v1.19.3

立ち上がっていますね。

物足りないので、コンテナを起動

テキトウにNginxサーバを立てて、curlしてみます。ここからは普通のK8sと一緒です。

今回使用した、マニフェストファイル(testpods.yaml)は以下です。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
        - name: nginx-container
          image: nginx:1.13
          ports:
            - containerPort: 80

作成したyamlをapplyします。

kubectl apply -f testpods.yaml

podが立っているか確認します。

kubectl get pod

次にServceを作ります。svc.yamlとして作成します。

apiVersion: v1
kind: Service
metadata:
  name: sample-clusterip
spec:
  type: ClusterIP
  ports:
    - name: "http-port"
      protocol: "TCP"
      port: 8080
      targetPort: 80
  selector:
    app: sample-app

Servceを作成します。

kubectl apply -f svc.yaml

確認は以下のコマンドでできます。

kubectl get svc

ここで、出力される sample-clusteripのCLUSTER-IPをコピーして、起動しているPodにcurlを実施します。

curl http://<CLUSTER-IP>:8080

NginxのHelloWorldが表示されるはずです。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
~~以下略

まとめ

非常に簡単にk8s環境を構築できました。まだ本番利用できるかの評価はできてないのですが、 検証用途としては非常にライトなのではないでしょうか?
これを期に、K8sやGCPを触ってみてはいかがでしょうか?

弊社では、一緒にCloud Nativeの環境を作って行ける企業様を探しております。
ご興味があれば、下記リンクからお問い合わせください!