Kubernetes!!!
私実はKubernetesについては触ったことなかったので、
この機会にDocker for Macで立ち上げてみました。
もろもろ概念なども紹介していきます。
■Whats Kubernetes
Dockerはコンテナの作成やコンテナ内でファイルシステムとして使われるイメージの作成、
管理、コンテナの実行といった機能が提供されていますが、ネットワークのルーティングや
複数コンテナの連携、複数台のサーバーを対象にコンテナを横断的に管理する機能などは
提供されていないんですよね。。個人的にshipyard使ってましたが。。。
じゃあクラスタ環境でDockerを利用する場合はどうすんのよって感じで
別途何らかの管理方法を用意する必要がありました。
それが!
Kubernetes!!!
ちなみにKubernetesはGoogleが立ち上げたプロジェクトで、Microsoft、Red Hat、IBMなども開発に参加してます。からのGoogleのデータセンターでコンテナ技術を利用してその経験を生かして開発されているそうです。AWSの場合EC2で構成されていると二台構成で冗長化を考えると思いますが、負荷分散するためにLBやらオートスケールなどなど、急なアクセス来た場合、負荷に耐えきれず結局サービスダウンしてしまったり、事前にサーバ台数増やしてもコストかかるだけ。Kubernetesは逆にどんなメリットが考えられるのか。
・サーバー台数と関係なく、クラスタリングで複数のアプリケーションを起動できる
・負荷に応じてアプリケーションごとに自動で数を増減できる
・サーバーを入れ替えることなくアプリケーションのデプロイができる。(数秒程度)
ではどんな機能があるのか。
・関連するコンテナのグルーピング
・コンテナに割り振られるIPアドレスの管理
・コンテナ間のネットワークルーティング管理
・複数のコンテナを利用した負荷分散
・コンテナに割り当てるストレージの管理
・コンテナの監視
・kubernetes architecture
https://kubernetes.io/docs/concepts/overview/components/
コンポーネント名 | 説明 |
---|---|
kube-apiserver | kubernetesを操作するためのAPIを提供する |
kube-controller-manager | コンテナの状態管理やノードの管理と言った各種管理作業を行う |
kube-proxy | コンテナへのネットワークルーティングおよび負荷分散を行う |
kube-scheduler | 各ノードに対しコンテナの割り当てなどを行う |
kubelet | 各ノード上でのコンテナ作成/削除やボリュームの割り当てなどを行う |
kubectl | API経由でKubenetesを操作するためのクライアントツール |
コンポーネントは他にもあるので公式を読みましょう。
最近Google Container EngineからGoogle Kubernetes Engineに名称が変わったり、
AWSもAmazon Elastic Container Service for Kubernetes (Amazon EKS)対応したので
幅広くなっていきました。
早速インストール。
■Kubernetes-powered Docker for Mac !!!!!!
Docker founder/CTO Solomon Hykes.
DockerCon EU 2017にてDockerがKubernetesを完全統合・サポートすることになり、
Docker for Macでkubernetesが使えるようになりました!2017/12/14(Edge版のみ)
■Install
https://docs.docker.com/docker-for-mac/install/
・Docker for Mac Edge
既にStable版インストールしてる方は特に気にしなくてインストールしちゃってOK。
・kubernetes setting
起動するとkubernetesタブが出てるやんけ!Enable kubernetesにチェックします。
Show system containersもチェックしたのでKubernetesの動作に必要なコンテナが起動しているはずです。
すると「インストール時間かかるけどいいのかい!?」と聞かれるので
そんなこと無用でインストールします。
1分ももかからなかった希ガス。
ちゃんとkubernetes動いてる!!
■Use kubectl command
・docker ps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09f212414d48 docker/kube-compose-controller "/compose-controller…" 42 seconds ago Up 42 seconds k8s_compose_compose-75f8bb4779-45vw4_docker_9a82a00a-f401-11e7-878e-025000000001_0 575881c2bc78 gcr.io/google_containers/pause-amd64:3.0 "/pause" 49 seconds ago Up 48 seconds k8s_POD_compose-75f8bb4779-45vw4_docker_9a82a00a-f401-11e7-878e-025000000001_0 8db933d7672f gcr.io/google_containers/k8s-dns-sidecar-amd64 "/sidecar --v=2 --lo…" About a minute ago Up About a minute k8s_sidecar_kube-dns-545bc4bfd4-dgmkr_kube-system_7192ba14-f401-11e7-878e-025000000001_0 74ca8c59cd0a gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 "/dnsmasq-nanny -v=2…" About a minute ago Up About a minute k8s_dnsmasq_kube-dns-545bc4bfd4-dgmkr_kube-system_7192ba14-f401-11e7-878e-025000000001_0 27ca12b738ac gcr.io/google_containers/k8s-dns-kube-dns-amd64 "/kube-dns --domain=…" About a minute ago Up About a minute k8s_kubedns_kube-dns-545bc4bfd4-dgmkr_kube-system_7192ba14-f401-11e7-878e-025000000001_0 9249790ce04c gcr.io/google_containers/kube-proxy-amd64 "/usr/local/bin/kube…" About a minute ago Up About a minute k8s_kube-proxy_kube-proxy-lbkcw_kube-system_719b50c2-f401-11e7-878e-025000000001_0 99b495b0a742 gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_kube-dns-545bc4bfd4-dgmkr_kube-system_7192ba14-f401-11e7-878e-025000000001_0 cfdac01edd92 gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_kube-proxy-lbkcw_kube-system_719b50c2-f401-11e7-878e-025000000001_0 8e749d1fa470 gcr.io/google_containers/kube-scheduler-amd64 "kube-scheduler --ku…" 2 minutes ago Up 2 minutes k8s_kube-scheduler_kube-scheduler-docker-for-desktop_kube-system_dbdce20be1ff149d1b97149bdff32e3d_0 97d1f435a1d5 gcr.io/google_containers/kube-apiserver-amd64 "kube-apiserver --ad…" 2 minutes ago Up 2 minutes k8s_kube-apiserver_kube-apiserver-docker-for-desktop_kube-system_6c05687a33760699e82b74dec860ece8_0 8afe7bed1575 gcr.io/google_containers/kube-controller-manager-amd64 "kube-controller-man…" 2 minutes ago Up 2 minutes k8s_kube-controller-manager_kube-controller-manager-docker-for-desktop_kube-system_d39c580338a426e001f5278f3d566d1a_0 f2e0f228f1c4 gcr.io/google_containers/etcd-amd64 "etcd --listen-clien…" 2 minutes ago Up 2 minutes k8s_etcd_etcd-docker-for-desktop_kube-system_8cf2571a4c3f64cf3429d6f601861eec_0 ecbdbe0141c0 gcr.io/google_containers/pause-amd64:3.0 "/pause" 2 minutes ago Up 2 minutes k8s_POD_kube-scheduler-docker-for-desktop_kube-system_dbdce20be1ff149d1b97149bdff32e3d_0 0c030d9e0f2b gcr.io/google_containers/pause-amd64:3.0 "/pause" 2 minutes ago Up 2 minutes k8s_POD_kube-controller-manager-docker-for-desktop_kube-system_d39c580338a426e001f5278f3d566d1a_0 9c9714258178 gcr.io/google_containers/pause-amd64:3.0 "/pause" 2 minutes ago Up 2 minutes k8s_POD_kube-apiserver-docker-for-desktop_kube-system_6c05687a33760699e82b74dec860ece8_0 a34ff09aaed8 gcr.io/google_containers/pause-amd64:3.0 "/pause" 2 minutes ago Up 2 minutes k8s_POD_etcd-docker-for-desktop_kube-system_8cf2571a4c3f64cf3429d6f601861eec_0 |
Kubernetes動作に必要なDNS,API Server,Etcd,Scheduler,Proxyが動いてます。
・docker images
1 2 3 4 5 6 7 8 9 10 11 12 |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker/kube-compose-controller v0.1.2 6480f70f7ac6 7 weeks ago 37.9MB gcr.io/google_containers/kube-apiserver-amd64 v1.8.2 6278a1092d08 2 months ago 194MB gcr.io/google_containers/kube-controller-manager-amd64 v1.8.2 5eabb0eae58b 2 months ago 129MB gcr.io/google_containers/kube-scheduler-amd64 v1.8.2 b48970f8473e 2 months ago 54.9MB gcr.io/google_containers/kube-proxy-amd64 v1.8.2 88e2c85d3d02 2 months ago 93.1MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.5 fed89e8b4248 3 months ago 41.8MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.5 512cd7425a73 3 months ago 49.4MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.5 459944ce8cc4 3 months ago 41.4MB gcr.io/google_containers/etcd-amd64 3.0.17 243830dae7dd 10 months ago 169MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 747kB |
イメージも盛り沢山。
・kubectl -h
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
$ kubectl -h kubectl controls the Kubernetes cluster manager. Find more information at https://github.com/kubernetes/kubernetes. Basic Commands (Beginner): create Create a resource from a file or from stdin. expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service run Run a particular image on the cluster set Set specific features on objects run-container Run a particular image on the cluster. This command is deprecated, use "run" instead Basic Commands (Intermediate): get Display one or many resources explain Documentation of resources edit Edit a resource on the server delete Delete resources by filenames, stdin, resources and names, or by resources and label selector Deploy Commands: rollout Manage the rollout of a resource rolling-update Perform a rolling update of the given ReplicationController scale Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job autoscale Auto-scale a Deployment, ReplicaSet, or ReplicationController Cluster Management Commands: certificate Modify certificate resources. cluster-info Display cluster info top Display Resource (CPU/Memory/Storage) usage. cordon Mark node as unschedulable uncordon Mark node as schedulable drain Drain node in preparation for maintenance taint Update the taints on one or more nodes Troubleshooting and Debugging Commands: describe Show details of a specific resource or group of resources logs Print the logs for a container in a pod attach Attach to a running container exec Execute a command in a container port-forward Forward one or more local ports to a pod proxy Run a proxy to the Kubernetes API server cp Copy files and directories to and from containers. auth Inspect authorization Advanced Commands: apply ファイル名を指定または標準入力経由でリソースにコンフィグを適用する patch Update field(s) of a resource using strategic merge patch replace Replace a resource by filename or stdin convert Convert config files between different API versions Settings Commands: label Update the labels on a resource annotate リソースのアノテーションを更新する completion Output shell completion code for the specified shell (bash or zsh) Other Commands: api-versions Print the supported API versions on the server, in the form of "group/version" config kubeconfigファイルを変更する help Help about any command plugin Runs a command-line plugin version Print the client and server version information Use "kubectl <command> --help" for more information about a given command. Use "kubectl options" for a list of global command-line options (applies to all commands). |
ちゃんとkubectlコマンドもインストールされてます。
・kubectl get nodes
1 2 3 4 5 6 |
$ kubectl config use-context docker-for-desktop Switched to context "docker-for-desktop". $ kubectl get nodes NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 4m v1.8.2 |
ほほう1nodeでクラスタ立ち上がってるのが分かりますな。
■まとめ
kubernetes使用しない場合はEnable kubernetesチェック外してapplyすればOKです。
長くなったので次回は適当にkubernetes使って構築してみます・3・
・参考
https://qiita.com/mihirat/items/ebb0833d50c882398b0f
https://knowledge.sakura.ad.jp/3681/
0件のコメント