zatsu na benkyou matome saito

勉強したことをまとめるだけのサイト、数学、プログラミング、機械学習とか

CH1:kubernetes基礎 - 基本的な構成と、各種機能について

kubernetes用語集

kubernetes チュートリアル

Docker & kubernetes tutorial YouTube

まずはDoker

#37: AI-人工知能/MLOps/docker/CH1: Docker imagesとVolumeについて

kubernetes

アプリケーションの運用のトレンドがMonolithからMicroservicesに移ってきているので、複数のコンテナを用意してそれらのコンテナをコンテナオーケストレーションツールで操作・運用することで様々な運用環境構築・対応している。

benefits

1. High Availability - アプリの動作が停止することを防止している 2. Scalability - アクセスを分散させて動作させることができるのでアプリの動作やパフォーマンスが高い 3. Disaster recovery - バックアップやリストアが容易にできる

kubernetesアーキテクチャ

スクリーンショット 2020-11-21 20.26.36.png (220.3 kB)

それぞれのworkerではkubeketというものが動いていて、それがそれぞれのworkerノードとデータをやりとりしたり、アクセスを行ったりを可能にしている

Pod, Service & Ingress

kubernetesの基本的な構成要素で、kubernetesを実用的に使うためにはこれらを知っておく必要がある。

スクリーンショット 2020-11-21 20.31.57.png (258.6 kB)

Pod

Podについての説明は公式HPに書いているが、実際に触ってみないとなんとも。。 密接に関連するアプリを起動しているコンテナをカプセル化させてまとめるコンテナのコンテナのようなもののよう。 https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-overview/

スクリーンショット 2020-11-21 23.04.48.png (895.3 kB)

  • Pod内で各アプリケーションごとにIPアドレスが振られており、コンテナがkillされた時に、新しくアプリケーションコンテナが立ち上げられるが、IPアドレスが変更されてしまう。そうなると、今まで接続していたIPアドレスに接続されなくなってしまい困るのでIPアドレスの永続化を行うためにServiceが用いられる。

Service and Ingress

PodとServiceのプロセスは結合されていないので、Podのプロセスが止まってしまってもServiceのプロセスが止まることはないのでIPアドレスの永続化を行える。 各PodはServiceを介してコミュニケーションを行う

スクリーンショット 2020-11-21 23.09.15.png (490.6 kB)

Ingress

クラスター内のServiceに対する外部からのアクセス(主にHTTP)を管理するAPIオブジェクトです。 Ingressは負荷分散、SSL終端、名前ベースの仮想ホスティングの機能を提供します。 引用:公式:Ingress

Config Map and Secret

Config Map

コンテナのアプリケーション名などが変更されたた時に各コンテナの設定を変更してre-buildやre-pushを行う必要があるため、一度アプリを止めて再度構築し直しを行わなければいけない。そのような状況を改善するためにConfig Mapが使われる。

スクリーンショット 2020-11-21 23.15.39.png (569.7 kB)

・例えば、dbのアプリケーション名を変更した時に、Config Mapの名称を変更するだけで、Config Mapから、アプリのロケーションを読み取れるのでわざわざDockerfileなどのアプリ名を変更してre-buildしたりしなくても済む。

スクリーンショット 2020-11-21 23.18.16.png (504.4 kB)

しかし、DBのユーザー名やパスワードなどを変更する際にこのConfigMapに記載することはやめたほうが良い。ユーザー名やパスワードの変更を管理したい際に使われるのがSecretという機能である。

Secret

スクリーンショット 2020-11-21 23.21.28.png (805.0 kB)

Volumes

Dockerコンテナのvolumesと同じようなもので、データベースをローカルで管理できるようにしてPodが落ちた時でもデータの永続化ができるようにするもの

Deployments and Stateful Sets

Deployment

Deoploymentは、Podのコピーを作ることによって、もしnode1のPodが落ちたとしてもload balancerによってnode2のアプリケーションをIPにセットすることで運用ができなくなる状態を防ぐことが可能。

スクリーンショット 2020-11-22 0.23.19.png (1.1 MB)

Stateful Sets

StatefulSetsではDBなどのStatefulなアプリケーションの複製を行うために設定されるもので、データベースが落ちた時にもデータの永続化ができるようにするためのもの。

Minikube and Kubectl

minikubeとは?

実運用する際に動くかテストを行いたい時にローカル環境でミニマムなPod環境を作成してテストを行うことができるツール - ローカルPC上にVirtual Boxを構築することができる - そのVirtual Box上でnodeを走らせることができる - 1 node K8s cluster

スクリーンショット 2020-11-22 0.42.02.png (333.1 kB) スクリーンショット 2020-11-22 0.43.47.png (274.0 kB)

kubuctlとは?

APIを通して、kubernetesの設定をCUIで行えるアプリケーション ローカルマシンにインストールしてterminal上からkubernetesを操作/設定できる スクリーンショット 2020-11-22 0.49.12.png (242.3 kB)