0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

kubeadm+containerd+ciliumを用いてk8s構築し、hubbleの動作確認するまで試した

Posted at

概要

kubernetesを導入する際にCNIをCalicoやFlannelなどを用いることが多いかと思いますが、その中でもCilium(読みは、おそらくシリアム)が気になったので、色々試してみようかと思いました。
CKAの勉強も兼ねているので、やるならkubernetesの構築からやってみます。
今後はラインタイムであるdockershimが削除されるのもあり、containerdもあわせて導入しました。
記事が長くなるので、今回は導入と動作確認のみとします。

Ciliumとは

以下、公式から引用

Ciliumは、Kubernetesクラスタやその他のコンテナオーケストレーションプラットフォームなどのクラウドネイティブ環境向けに、ネットワーク、セキュリティ、観測性を提供するオープンソースプロジェクトです。

Ciliumの基盤となっているのは、eBPFと呼ばれる新しいLinuxカーネル技術で、強力なセキュリティ、可視性、ネットワーク制御ロジックをLinuxカーネルに動的に挿入することができます。eBPFは、高性能ネットワーキング、マルチクラスタおよびマルチクラウド機能、高度な負荷分散、透過的暗号化、幅広いネットワークセキュリティ機能、透過的観測性などの提供に使用されています。

eBPFをフルに使って、Kubernetesのネットワークに関するセキュリティや可視化を実現できているようです。
またCiliumにはHubbleというCilium上の通信を可視化するツールがあります。

より分かりやすい解説ページがありますので、詳しくは下記参照が良いかと思います。
https://blog.framinal.life/entry/2021/02/20/222728
https://thinkit.co.jp/article/18836

では、環境構築を始めていきたいと思います。

環境

aws + kubeadm + containerd + cilium

kubeadm + containerdを導入します。

※細かい設定なしでシンプルに導入します。

環境用意

  1. aws環境でUbuntu20.04を2台起動します。
    今回は、インスタンスサイズ:t3.mediumとしました。
  2. 分かりやすいようにコントロールプレーン(cp)側のホスト名を変更します。
    sudo hostnamectl set-hostname k8scp
  3. ワーカーノード(worker)側のホスト名を変更します。
    sudo hostnamectl set-hostname k8swork

cp側、worker側のいずれに対しても下記の手順を実施

  1. k8s公式のkubeadmのインストールにある手順の「ランタイムのインストール」の手前まで進めます。
  2. containerdの手順を実施し、「kubeadmのインストール」の手順にまた戻ります。
  3. 「kubeadm、kubelet、kubectlのインストール」手順を実施します。
  4. kubeletが使用するcgroupドライバーを設定します。
    • /etc/default/kubeletのファイルにKUBELET_EXTRA_ARGS=--cgroup-driver=systemdを記入します。
  5. kubeletをリスタートし、systemctl status kubeletで起動できていることを確認します。

コントロールプレーン(cp)側の作業

kubeadm initを実行します。

もし、ここでinitが失敗した場合はissueに従い、containerdの設定ファイルを削除すると上手くいくかと思います。

rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init

kubeadm initが成功した際のメッセージに従い、

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

を実行することで、kubectlコマンドが実行できるようになります。
そして、kubeadm joinのメッセージも忘れず、メモしておきます。

kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

ワーカーノード(worker)側の作業

cp側でメモしたコマンドを実行することで、workernodeとして参加することができます。

kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

成功したメッセージが出たら、ぜひcp側でkubectl get nodeを実行して動作していることを確認してみましょう。

ubuntu@k8scp:~$ kubectl get node
NAME      STATUS   ROLES                  AGE   VERSION
k8scp     Ready    control-plane,master   21h   v1.21.1
k8swork   Ready    <none>                 21h   v1.21.1

ciliumを導入

事前にhelmをインストールします。

公式の手順に従い、ciliumをデプロイします。

cilium statusコマンドで結果が出れば、導入完了です。
このまま、可視化ツールであるhubbleも導入していきましょう。

公式手順でhubbleをインストールします。

ここまで導入できた場合は、cilium statusでhubbleのステータスもOKと表示されていると思います。

ファイル名

cilium用の接続テストpodをデプロイして、hubbleで確認してみます。

公式手順に従い、デプロイします。
cp側でhubbleを起動してみます。

# 接続用のIPアドレスを確認
curl ifconfig.io
# 外部公開する
kubectl port-forward -n kube-system svc/hubble-ui --address 0.0.0.0 --address :: 12000:80

ブラウザでIPアドレス:12000に接続します。

下記の画面が表示されていれば、完了です。

初回画面

ファイル名

cilium-testを選択した時の画面

ファイル名

まとめ

今回はciliumの導入からhubbleの起動まで行いました。
まだまだciliumの機能を使い倒していないので、これから色々試してみたいと思います。
ここまで見ていただきありがとうございました。

その他

ciliumについて簡単に学習する方法があるので、下記のURLを参照してみてください。
(「Cilium getting started」をやってみましたが、かなりわかりやすかったです。)
https://play.instruqt.com/isovalent

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?