‫Kubernetesは非常に柔軟性が高いので､ Kubernetesのクラスタシステムでどのように作業を行うかについては､
‫たくさんのスタイルが存在します｡
‫以前､ その話を聞いたことがありますよね｡
‫ワークフローに合わせた様々な方法があり､ コマンドによって使い分けができることをお伝えしました｡
‫というのも､
‫人々はどのように使えばいいのかを知りたがるからです｡
‫何が一番いい方法なのかとか｡
‫ベストプラクティスは何ですか？ それは､ あなたが何を求めているかによるので､
‫難しいですね｡
‫それは......魅力的でない時代遅れのシステムです｡
‫だから､ いろいろなやり方があるんです｡
‫そこで､ それを打破しようとするのです｡
‫だから､ これは重要なキーポイントなんです｡
‫でも､ これはあくまでスライド学習です｡
‫ここでは､ これらの概念を分解し､ その意味をKubernetesに具体的に適用するために､
‫私が数分間お話しすることになります｡
‫Kubernetesの使い方については､ 基本的に3つの推奨される戦略があるのですが､
‫その前に､ 推奨されるアプローチについて説明します｡
‫ここで､ 次の講義が何なのかわかるように､
‫いくつかの用語を分解する必要があります｡
‫多くのブログ記事やドキュメントで目にすることでしょう｡
‫ImperativeとDeclarative｡
‫Kubernetesに関連して､ それを説明する最良の方法は､
‫バックアップして､ ソフトウェアの面でそれが何を意味するかを言うことだけです｡
‫命令的にソフトウェアを書いているときは､ そのプログラムがどのように動作するのか､
‫一つひとつのステップを順番にこなしていくことに集中しています｡
‫ソフトウェアに対する宣言的アプローチについて語るとき､ 私たちは､
‫それが何を達成すべきかをより詳しく説明しているのです｡
‫その最終目標は何ですか？
‫私たちは､ それがどのように届くかは気にせず､ ただ届くことだけを考えます｡
‫例えてみましょう｡
‫コーヒーが飲みたいと想像してください｡
‫毎朝起きると､ その1杯目を探している｡
‫自分で作るとなると､
‫不真面目にやるしかない｡
‫お湯を沸かすことも考えないとね｡
‫次の一手は？ さて､ コーヒー豆が欲しいのですが｡
‫それから､ その豆を挽かなければならない｡ 具体的にどのくらい必要ですか？
‫その豆にどれくらいの水を注げば､
‫最高のコーヒーが飲めるか､ などですね｡
‫一歩一歩､ どうやったらできるかを考えながら進めています｡
‫それは必須です｡ Kubernetesを見たときに､ それについてはちょっとだけ説明します｡
‫宣言型モード｡ コーヒーショップでバリスタと話をしているようなものだと思ってください｡
‫単に聞いているだけなんですけどね｡
‫コーヒーが飲みたい
‫私の仕事は､ コーヒーカップを頼むことだけで､
‫あとは相手次第で､ ねぇ｡
‫一から作る必要があるのでしょうか？ 鍋の中にすでに作られているものがあるのでしょうか？
‫それとも､ 鍋が古すぎるのでしょうか？
‫彼らができることは... できる コーヒーを作るのに､ 3回くらい失敗してやり直さなければならないかもしれない｡
‫それでいいんです｡
‫どうやって作っているのかは聞いていません｡
‫コーヒーを出してもらっている｡
‫これをKubernetesで使用するコマンドに当てはめてみましょう｡
‫どんなツールでも､
‫まず命令的に学習するのが基本ですから､ これまでほぼ学習してきた命令型に焦点を当てましょう｡
‫これらのことを必要な順番に行い､
‫その方法を明確に指示するのです｡
‫これらのコマンドは､ kubectl runや､ create deployment､
‫そしてまだ取り上げていないupdate､ editといったものです｡
‫これらは､ 自分が知っている状態からスタートさせるコマンドの種類です｡
‫配置を作成]コマンドを使用する場合､ 配置がまだ作成されていないことがわか
‫ります｡
‫こうして､ クリエイトを使っているんですね｡
‫何かを更新したり､ 編集したりする場合は､ 明示的にそのコマンドを使用することになります｡
‫コマンドラインとCLIへの入力でここが良いのは､
‫作成､ 更新､ 削除など､ 異なるタイプのアクションに異なるコマンドが使用されることです｡
‫その方が､ 行動が分かっているので､ 脳が記憶しやすいのです｡
‫ただ､ オブジェクトやリソースの状態がすでに分かっていて､
‫ツールを使い始めたばかりであれば､ 命令文の方が簡単だということは覚えておいてください｡
‫つまり､ サービスを作って､ そのサービスがロードバランサーである必要がある､
‫ということを明確に考えたいのです｡
‫そういうのってあるじゃないですか｡ それなら､ CLIでこういうのを打った方が､
‫人間の頭では楽なんですよ｡
‫残念ながら自動化するのは簡単ではありません｡
‫この種の仕事の最大の欠点は､
‫自動化されたスクリプトやツールを使って､
‫「ああ､ これはあなたが望むアップデートなのか？
‫それともクリエイトなのか？
‫それとも削除？ ここで何をすればいいんだ？
‫そのような作業を自動化するのは難しいんです｡
‫頭の中では簡単なことなんです｡
‫私たちがCLIで入力しやすいように｡ 自動化するのは難しい
‫宣言的というのは､ 状態を本当に知らないということだと覚えておいてください｡
‫コーヒーを思い出してください｡ コーヒーがあるのかないのかわからない｡
‫すでに作られているかもしれません｡ 一から作らなければならないかもしれない｡
‫州を知らない｡
‫ただ､ 自分が望む結末はわかっています｡
‫まさに宣言型にふさわしいですね｡
‫自動化のメリットとして､ 同じコマンド､
‫通常はapplyコマンド､ kubectl applyを使用することになります｡
‫このコマンドは､ リソースの作成､ 更新､
‫削除に関係なく使用することができます｡
‫もしあなたがYAMLを見始めたら､
‫すぐにここに入ることになるでしょう｡
‫そのYAMLは､ 1つのファイルにすることもできます｡
‫たくさんの異なるタイプのリソースを1つのYAMLにバンドルすることができます｡
‫あるいは､
‫1つのディレクトリの各YAMLファイルに1つのオブジェクトとして分割し､ 1つのコマンドでディレクトリ全体に適用することも可能です｡
‫そこには､ たくさんの選択肢があるのです｡
‫この方法を使い始めない理由は､ 1つは､
‫常に必要とは限らないからです｡
‫このファイルを作成し､ その中にあるすべてのものを実行する前に作成する必要があるため､
‫少し複雑になっています｡
‫それらを最初から持っているとは限りませんし､ ポッドなどを作るためだけに作るとは限りませんよね｡
‫だから､ 始めに､ CLIは理にかなっているのです｡
‫標準的な命令形のコマンドを使うのは理にかなっている｡
‫しかし､ 制作や自動化について考え始めると､
‫この繰り返しの更新作業を何度も行うことになり､ 「よし､
‫これでいこう」と思うようになります｡
‫もっと宣言的なアプローチが必要だ｡
‫YAMLのキーと設定をすべて知っている必要があります｡
‫ゼロから始めて､ YAMLに入れるべきすべての方法と事柄について､
‫時間をかけて専門知識を蓄積しなければなりません｡
‫ここで素晴らしいのは､ あなたの投資が無駄にならないことです｡
‫Kubernetesでは､
‫kubectl runやcreateといったCLIを入力することで､ 基本的なことができるようになっています｡
‫その間に､ 出力コマンドでYAMLを見ているわけですが､
‫-o yamlを覚えておいてください｡
‫YAMLの出力を見ることができます｡
‫YAMLを見る方法は他にもあります｡
‫YAMLがどのようなものであるかの知識を蓄えることで､ 本番で一日中YAMLを使うような状況になったとき､
‫YAMLがどのように分割されるかにもう少し慣れることができるようになるのです｡
‫このYAMLの方法は､
‫オーケストレーションを自動化する最も簡単な方法です｡
‫また､ これは最も簡単なゲトオペの幸福の方法です｡
‫この講座では､
‫ゲットオペについて多くは語りません｡ これは､ getツールを真実のソースとして使用するDevOps作業の一種であるため､
‫ググってみることをお勧めします｡
‫基本的に､ 環境に変更を加えたいときは､ 毎回､ いくつかのYAMLを編集します｡
‫適用コマンドを実行するのです｡
‫get-commitをするんですね｡ 今､ あなたはこのように､ 自分が行ったすべてのことのログを取得することができます｡
‫これはget-opsというオペレーションモデルの属性の一つで､
‫これをdeclarativeで行うことでそこに到達することができます｡
‫Kubernetesチームが考える､ Kubernetesコマンドラインの3つの使い方を見てみましょう｡