• 日本語
    • English (英語)
Avinton JapanAvinton JapanAvinton JapanAvinton Japan
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ

軽量版Kubernetesディストリビューション – k0s クラスターの構築

  • ルーティング
  • データベースの命名規則
  • 三目並べ – 2.〇×を交互にゲーム盤に入るようにしよう
  • 三目並べ – 3.勝敗がつくようにしよう
  • クリーンコード(Clean Code)
  • 三目並べ – 4.「スタート」「リセット」ボタンをつけよう
  • 三目並べ – 5.先攻後攻を決めて、コンピュータ対戦にしよう(前編)
  • インフラストラクチャー(サーバー、コンポーネント、RAID)
  • 機械学習入門者向け Support Vector Machine (SVM) に触れてみる
  • YOLOv8を用いた物体検出
  • 正規表現とパイプ
  • 機械学習エンジニアに必要なスキル
  • 軽量版Kubernetesディストリビューション – k0s クラスターの構築
  • ファイル操作コマンド
  • グループとユーザー
  • 困った時に使うコマンド
  • 一般グループのユーザーとグループ
  • プライバシーポリシー
  • 三目並べ – 6.先攻後攻を決めて、コンピュータ対戦にしよう(後編)
  • フロントエンド開発のための環境構築
  • ファイル検索コマンド
  • 質問
  • 仮想化環境のディスク容量を拡張する
  • ユーザー権限とアクセス権
  • データ分析基礎 – Part1
  • 三目並べ – 0.導入
  • テキスト処理
  • データベースへのデータロード
  • 機械学習概要1
  • 機械学習入門者向け Naive Bayes(単純ベイズ)アルゴリズムに触れてみる
  • ファイル管理
  • SSHを使用してホストOSからゲストOSに接続する
  • 機械学習入門者向け ChainerRLでブロック崩しの学習
  • 機械学習入門者向け ランダムフォレストによる Kaggle Titanic生存者予測
  • 機械学習概要2
  • データ分析基礎 – Part 2
  • 機械学習入門者向け 分類と回帰の違いをプログラムを書いて学ぼう
  • フロントエンドのWeb開発について
  • ダイナミックルーティング
  • 三目並べ – 1.ゲーム盤を作ろう
  • 【Python入門】Python Numpy チュートリアル
  • Amazon EC2 インスタンスの初期設定をしよう
  • AmazonEC2とVPCでネットワークとサーバーを構築しよう
  • Apache NiFi Exercise
  • Apache NiFi データパイプライン基礎
  • Apache NiFiの環境設定
  • Apache Spark 基礎
  • Apache SparkとApache Zeppelinの概要と環境構築
  • Apache Superset maptoolの使い方
  • Apache Superset 基礎
  • Apache Superset 概要と環境構築
  • Apache Zeppelin 基本機能
  • APIのデモンストレーション
  • Avinton Academy コンテンツガイド
  • AWS CLIをインストールしてコマンド操作しよう
  • AWS CLIを使ってEC2のファイルをS3へアップロードしよう
  • AWS Route 53を使って独自ドメインのWebページを表示させてみよう
  • AWSアカウントの作成と必ずやるべきセキュリティ対策
  • AWSのEC2インスタンスでWordPressブログを公開してみよう
  • AWS入門者向け 初心者が最初に理解すべきEC2とVPCの基本的な用語解説
  • CCNA
  • Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう
  • CISCO 1800ルータセットアップ
  • CSV import & export – Node.js, mySQL – 1
  • CSV import & export – Node.js, mySQL – 2
  • Docker Compose(Nginx + Flask + MySQL)演習
  • Docker Engineのubuntu上へのinstall
  • Docker 概要とセットアップ
  • Docker, Kubernetesの学び方について
  • Dockerコンテナイメージの最適化/ベストプラクティス
  • DockerとApacheを使ってWebサーバーを構築しよう
  • EC2からS3へ自動でぽいぽいアップロードするスクリプトの作成
  • ESP32-CAMのサンプルアプリケーションを実行する
  • 01 – Sparkfun Inventor’s Kit の準備
  • 02 – Sparkfun Inventor’s KitでLチカ
  • 03 ポテンショメータでLEDの点滅間隔をアナログ入力する
  • 04 フォトレジスタで明るさに反応するシステムをつくる
  • 05 LCDに文字列を表示する
  • 06 – BME280とLCDを組み合わせて温度計をつくる
  • ESP32とArduino IDE/PlatfromIOでHello Worldアプリケーションの実行
  • ESP32と超音波センサー HC-SR04 で物体の距離を計測する
  • ESXi – Switchの追加とVLAN
  • ESXi – VyOS
  • ESXi – 小規模ネットワーク 構築
  • Gitとは
  • VS CodeでGitHub Copilotを設定する
  • VSCode リモート開発環境
  • GNS3のセットアップ
  • Kubernetesクラスター上へのOpenVINOモデルサーバーを使用したサンプルアプリケーションのデプロイ
  • Linuxとは
  • NAT
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – React編
  • NodeJSでWebアプリケーション開発 – Socket.IO編
  • NVIDIA Cumulus VX + GNS3でBGPネットワークのシミュレーション
  • OpenCVのテストプログラム
  • PacketTracerのセットアップ
  • Pandasによる構造化データ分析
  • PCからルータ、スイッチへのSSH接続設定
  • PostGIS exercise
  • PostgreSQL – Python – Apache – Bootstrap
  • MySQLとMySQL Workbench のセットアップ
  • PostgreSQL Setup
  • PostgreSQL – インデックスを利用したパフォーマンス改善方法
  • PostgreSQL – パーティショニングを利用したパフォーマンス改善方法
  • PostgreSQLによるデータ分析
  • postgreSQLへのshp fileのimport
  • Python2.7とOpenCVのインストール
  • Python3.8 と OpenCV のインストール (Ubuntu20.04LTS)
  • Pythonでデータベースを操作する
  • Pythonで画像を分類するプログラムを作成する
  • Pythonによるマルチスレッドプログラミング実践
  • Raspberry Pi 4B のセットアップ
  • Raspberry PiとBME280を使用して温度と湿度、気圧を読み取る
  • REDIS
  • Redux基礎 – 主要な概念と用語
  • Ruby on Rails を MySQLでセットアップ
  • Ruby on Railsによる簡単なウェブアプリケーション
  • SampleアプリケーションのKubernetes上へのデプロイ
  • Scala 基礎
  • scikit-learnとは
  • Spark SQL エクササイズ
  • SparkMLによるKaggle Titanic生存者予測
  • KNIME, AutoMLライブラリによる住宅価格予測
  • SparkMLによる住宅価格予測
  • SQL 便利な関数
  • Ubuntuの基本設定
  • uhubctlでUSBデバイスのオンオフをコントロール
  • Terraform入門 2 – Terraformのstate管理
  • Terraform入門 1 – TerraformでAWS上にEC2インスタンスを作成する
  • Virtualisation and Container (仮想化とコンテナ) – Ansible, Docker and Kubernetes
  • viエディタ
  • VLAN
  • VMware ESXi サーバー構築
  • Webアプリ開発に欠かせないGoogle Chrome DevToolsの基本
  • Windows Server 2012 R2 Hyper-V
  • YOLOv5を用いた物体検出
Home Avintonアカデミー 軽量版Kubernetesディストリビューション – k0s クラスターの構築
Kubernetes logo
k0s

Kubernetesクラスターは、リソースの少ないエッジデバイスやミニPC上でも実行できるようになりました。その中でも、k0sは軽量なKubernetesディストリビューションで、少ないリソース使用量でKubernetesクラスターを構築することができます。このチュートリアルでは、4台のMiniPCを使用して、k0sクラスターを構築します。(MiniPCがない場合は、VMを使用して構築することもできます。)

対象は、LinuxやDocker、Kubernetesの基礎知識がある方です。

このチュートリアルは4章構成です。

1. Ubuntu server 20.04 LTSをインストールする
2. ネットワークの設定
3. Control plane nodeにk0sをデプロイする
4. Worker nodeにk0sをデプロイする

必要なデバイスは以下のとおりです。

  • MiniPC 4台 (最低2台: マスターノード + ワーカーノード)
  • Netowork スイッチ (4ポート以上)
  • LANケーブル 4本
  • キーボード + ディスプレイ
  • USBフラッシュメモリー (4GB以上)

例として使用したMini PCのスペックは以下の通りです。

  • 4 core CPU
  • 4GB Memory
  • 60GB Storage
  • イーサネット用LANポート
  • Wifi インターフェース

MiniPCがない場合は、同様のスペックの仮想環境上でも構築できます。

1. Ubuntu server 20.04 LTSをインストールする

4台のMini PC上にUbuntu Server 20.04 LTSをセットアップします。
hostnameは1台にmaster01、他のデバイスにはworker01, worker02など一意なhostnameを付けます。

VMを使用する場合も同様に、Ubuntu Server 20.04を4台のVMにインストールしてください。

1.1. ISOイメージファイルのダウンロード

ローカルのPC上から以下のリンクにアクセスし、Ubuntu Server 20.04 LTSのISOイメージを取得してください。(約1.2GB)

  • https://releases.ubuntu.com/20.04/

1.2 USBブータブルディスクの作成

ローカルのPC上にて、ダウンロードしたISOイメージを使用して、USBブータブルディスクを作成してください。

1.3 インストールの開始

MiniPCにUSBディスクを挿入し、キーボードを使用し、F2キーやF11キーなどを連打し、起動ディスクからインストールを開始します。 (キーはデバイスによって異なります。)

1.4 画面に従ってインストールを進めます。

この時点ではネットワークやWIFIの設定などは空白、または仮の設定で構いません。(後程、設定を行います。)

hostnameは1台にmaster01、他のデバイスにはworker01, worker02など一意なhostnameを付けます。

username, passwordはすべてのデバイス間で同じでもOKです。 例としてavintonというユーザーを作成しました。 SSHはインストールしてOKです。

2. ネットワークの設定

デバイスがインターネットに接続できるように、またデバイス間通信ができるようにネットワークの設定を行います。
この手順はすべてのMini PCに対して共通です。

VMの場合は、管理コンソールよりネットワークの構成を行ってください。 インターネット接続とノード間の接続ができるようにインターフェースを構成してください。

ネットワークの設定は環境によって異なりますが、例では以下のように構成します。

軽量版Kubernetesディストリビューション – k0s クラスターの構築

イーサネットインターフェース

  • master01: 192.168.2.100/24
  • worker01: 192.168.2.101/24
  • worker02: 192.168.2.102/24
  • worker03: 192.168.2.103/24

Wifiインターフェースの設定は、ご使用のWifi環境で異なります。
環境に併せて設定してください。IPアドレスは固定しなくても大丈夫です。

2.1 netplanでnetworkの接続を構成

/etc/netplan/以下に設定ファイル/etc/netplan/99-network-all.yamlを作成します。
Wifiの設定項目は適宜変更してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: false
      addresses:
        - 192.168.2.100/24
      nameservers:
        addresses: [192.168.2.1]
      routes:
        - to: default
          via: 192.168.2.1
          metric: 50
  wifis:
    wlp2s0b1:
      dhcp4: no
      dhcp6: no
      addresses: ...
      gateway4: ...
      nameservers:
        addresses: [...]
      access-points:
        "...":
          password: "..."

1
sudo netplan --debug apply

2.2 インターネットの疎通を確認

1
ping google.com

2.3 パッケージの更新

1
sudo apt update && sudo apt upgrade -y

2.4 再起動

1
sudo reboot

3. Control plane nodeにk0sをデプロイする

ここからはコントロールプレインノードを設定していきます。
例では、master01をコントロールプレインノードとして設定します。

3.1. k0sをインストールする

1
curl -sSLf https://get.k0s.sh | sudo K0S_VERSION=v1.22.2+k0s.1 sh

3.2 設定ファイルを作成する

1
2
3
mkdir -p /etc/k0s
k0s config create > k0s.yaml
cp k0s.yaml /etc/k0s/k0s.yaml

必要に応じて設定を更新してください。 こちらのページが参考になります。

3.3 k0sを起動する

1
sudo k0s install controller -c /etc/k0s/k0s.yaml --enable-worker --kubelet-extra-args="--node-ip=192.168.2.100 --address=0.0.0.0"

1
sudo k0s start

k0sの状態の確認を行ってください。

1
sudo systemctl status k0scontroller.service

1
2
3
4
5
$ sudo k0s status
Version: v1.22.2+k0s.1
Process ID: 691
Role: controller
Workloads: false

3.4 worker node用のtokenを発行する

1
sudo k0s token create --role=worker > token-worker01

1
2
3
4
$ ls -lt token-worker0*
-rw-rw-r-- 1 avinton avinton 1753 May 11 06:49 token-worker03
-rw-rw-r-- 1 avinton avinton 1757 May 11 06:49 token-worker02
-rw-rw-r-- 1 avinton avinton 1753 May 11 06:49 token-worker01

生成したtokenを各ノードに配布します。例えば、

1
scp worker01 avinton@192.168.2.101:/home/avinton/

 

4. Worker nodeにk0sをデプロイする

配布されたtokenを使用して、各ノードをクラスターに追加します。
以下は各ワーカーノード上で行ってください。
例では、worker01, worker02, worker03をコントロールプレインノードとして設定します。

4.1 k0sのインストール

1
curl -sSLf https://get.k0s.sh | sudo K0S_VERSION=v1.22.2+k0s.1 sh

例えば、

1
sudo k0s install worker --token-file token-worker01 --kubelet-extra-args="--node-ip=192.168.2.101 --address=0.0.0.0"

1
sudo k0s start

4.2 k0sの状態を確認

1
2
3
4
5
$ sudo k0s status
Version: v1.22.2+k0s.1
Process ID: 712
Role: worker
Workloads: true

完了したら上記の手順をすべてのワーカーノードに繰り返します。

4.3. クラスターの状態を確認

すべてのワーカーノードを追加したら、マスターノードからクラスター全体の様子を確認します。

1
2
3
4
5
$ kubectl get node
NAME       STATUS     ROLES    AGE   VERSION
worker01   Ready         45h   v1.22.2+k0s
worker02   Ready         45h   v1.22.2+k0s
worker03   Ready         45h   v1.22.2+k0s

1
2
3
4
5
6
7
8
9
10
11
12
13
$ kubectl get pods -n kube-system
NAME                              READY   STATUS             RESTARTS   AGE
coredns-5c98d7d4d8-dv7g6          1/1     Running            0          6h26m
konnectivity-agent-27cjf          1/1     Running            0          6h26m
konnectivity-agent-6qk4d          1/1     Running            0          6h26m
konnectivity-agent-pccj2          1/1     Running            0          6h25m
kube-proxy-7wkbw                  1/1     Running            0          6h26m
kube-proxy-b7sbv                  1/1     Running            0          6h26m
kube-proxy-zwslm                  1/1     Running            0          6h26m
kube-router-48bgh                 1/1     Running            0          6h26m
kube-router-d4qj6                 1/1     Running            0          6h26m
kube-router-l8rj8                 1/1     Running            0          6h26m
metrics-server-6fbcd86f7b-gv7z5   1/1     Running            0          135m

お疲れ様でした。これでk0sクラスターの構築が完了です。
次のタスクとしてKubernetes上にサンプルアプリケーションのデプロイに進んでください。

あなたも、Avintonでこのような最先端技術を習得し活用してみませんか?

社員の成長を導きながら、AIやビッグデータなどの最先端技術をプロジェクトに活用していくことが私たちのビジョンです。Avintonの充実した技術研修でスキルアップを図り、あなたのキャリア目標を一緒に達成しませんか?

採用情報

採用情報

採用情報

Categories

  • 相互学習
  • 採用
  • 社員インタビュー
  • 学習&資格取得
  • 技術解説
  • イベント告知
  • 学内説明会&講義
  • 産学連携
  • 就職活動
  • イベントレポート
  • その他
  • 技術ブログ&インタビュー
  • mainpage
  • New Graduates Interviews
  • 中途エンジニア
  • カテゴリーなし
  • ニュースリリース&イベント

Avinton SDGs

SDGsへの貢献

Search

タグ

AI時代の経営 AvintonAcademy on Campus AWS Docker DQN FINOLAB Git IoT James Cauchi LPIC LPIC-2 PM&PMO Predictive Maintenance Raspberry Pi Sound Analysis SSD イベントレポート インターン インフラ エッジコンピューティング エリクソン クラウトネイティブ セミナー ディープラーニング データ生成 データ解析 ファンダフルリレーマラソン モブワーク リスキリング リードエンジニア 中瀬幸子 企業説明会 勉強会 大学&専門学校 帰社日 強化学習、機械学習 技術ブログ 採用 掲載告知 未経験 田中 研之輔 画像分類 社員紹介 第一級陸上特殊無線技士 観光データ
© 2023 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
  • 日本語
    • English (英語)
Avinton Japan