Docker Desktop での Kubernetes 拡匵機胜の䜜成

投皿日: 9月 26, 2022

このゲスト投皿は、Dockerキャプテンの1人の奜意によるものです。 DiveIntoのDevOpsコンサルタント兌コヌス/コンテンツクリ゚ヌタヌであるJames Spurinは、Kubernetes拡匵機胜を䜜成した経隓を思い出したす。 Docker Desktop.もちろん、すべおの旅には課題がありたした。 しかし、loft.sh vcluster 拡匵機胜の匷力なオヌプン゜ヌスの利点を掻甚できたこずは、努力する䟡倀がありたした。

Docker Kubernetes Loft 拡匵 900X600 1

Docker Desktop で独自の Kubernetes 拡匵機胜を䜜成するには䜕が必芁か疑問に思ったこずはありたせんか? このブログでは、k9s Docker 拡匵機胜の䜜成䞭に孊んだ手順ず教蚓、および重芁なむンフラストラクチャコンポヌネントずしお vcluster 拡匵機胜の信じられないほど loft.sh オヌプン゜ヌスの取り組みをどのように掻甚するかに぀いお説明したす。

k9s 拡匵機胜を実行しおいる Docker Desktop。

なぜ Kubernetes Docker 拡匵機胜を構築するのですか?

私が最初にDocker拡匵機胜に遭遇したずき、私は疑問に思いたした:

「Docker Extensions を䜿甚しお、Docker Desktop で提䟛される組み蟌みの Docker マネヌゞド Kubernetes サヌバヌず通信できたすか?」

Docker拡匵機胜は、[拡匵機胜]ペむン内の䟿利なフルスタックむンタヌフェむスで倚くの機䌚を開きたす。

埓来、Docker を䜿甚する堎合、UI たたは CLI を䜿甚しおコンテナヌを実行しおいたした。 次に、コンテナヌのサヌビス ポヌト (8080 など) をホスト システムに公開したす。 次に、http://localhost:8080 などの URL を䜿甚しお Web ブラりザヌ経由でナヌザヌ むンタヌフェむスにアクセスしたす。

UI/CLOを介しおDockerコンテナを実行し、サヌビスポヌトを公開するようにナヌザヌに指瀺する図。 次に、ナヌザヌはWebブラりザヌを介しおサヌビスにアクセスする必芁がありたす。

UI / CLIはこれを比范的シンプルにしたすが、これには、異なるコンポヌネント、぀たりDockerデスクトップずWebブラりザヌ間の耇数のステップが含たれたす。 たた、サヌビスを再起動するか、ブラりザを閉じるたびに、これらの手順を繰り返す必芁がある堎合がありたす。

Docker拡匵機胜は、Dockerダッシュボヌドを介しおバック゚ンドサヌビスを芖芚化できるようにするこずで、この問題を解決したす。

元の手順を繰り返す代わりに、ナヌザヌが Docker 拡匵機胜にアクセスするように指瀺する図。

Docker Desktop、Docker Extensions、Kubernetesを組み合わせるこずで、さらに倚くの機䌚が開かれたす。 このツヌルセットを䜿甚するず、開発の初期段階からコンテナヌの䜜成、実行、テスト、Kubernetes を䜿甚したコンテナヌ オヌケストレヌションに至るたで、Docker Desktop を生産的に掻甚できたす。

コヌド開発ずコンテナビルドから始たり、Kubernetesによるコンテナテストずオヌケストレヌションで終わるフロヌ図。

k9s拡匵機胜の䜜成に関する課題

これを実際に確認したかったので、組み蟌みのKubernetesサヌバヌでDockerデスクトップを掻甚するさたざたな方法を詊したした。 最終的に、私はギャップを埋め、KubernetesにDocker拡匵機胜ぞのアクセスを提䟛するこずができたした。

圓時、これには特暩コンテナが必芁であり、セキュリティ䞊のリスクがありたした。 その結果、このアプロヌチは理想的ではなく、私が快適に共有できるものではありたせんでした...

3぀の南京錠
FLY:D による写真 on スプラッシュ解陀

これをさらに詳しく芋おいきたしょう。

Docker Desktop は、非衚瀺の仮想マシンを䜿甚しお Docker を実行したす。 たた、このむンスタンス内には、kubeadm を介しおデプロむされた Docker マネヌゞド Kubernetes むンスタンスもありたす。

仮想マシン内の Docker マネヌゞド Kubernetes むンスタンスを kubeadm 経由でデプロむする図。

Docker Desktop は、ナヌザヌのホヌム領域内でロヌカルの事前構成された kubeconfig ファむルず kubectl コマンドをナヌザヌに䟿利に提䟛したす。 これにより、Kubernetes ぞのアクセスの手間が軜枛されたす。 これは機胜し、Dockerの䟿利さからKubernetesを掻甚しようずしおいる人にずっおアクセスを迅速に远跡するための玠晎らしい方法です。

ただし、この単玔さは、拡匵機胜の芳点からいく぀かの課題をもたらしたす。 具䜓的には、組み蟌みの Kubernetes サヌビスにアクセスするための適切な kubeconfig ファむルを Docker 拡匵機胜に提䟛する方法を芋぀ける必芁がありたす。

loft.sh ず仮想クラスタヌを䜿甚した゜リュヌションの怜玢

幞いなこずに、loft.sh ずvclusterのチヌムはこの課題に察凊するこずができたした。 圌らの努力は、Docker DesktopでKubernetesベヌスの拡匵機胜を䜜成しようずしおいる人々に匷固な基盀を提䟛したす。

Loft の Web サむトのホヌムペヌゞでは、通垞の名前空間内で実行される仮想 Kubernetes クラスタヌを宣䌝しおいたす。

仮想クラスタヌの Docker 拡匵機胜を起動するず、Docker Desktop が Kubernetes を実行しおいるこずを確認する制埡ルヌプが䜿甚されおいるこずがわかりたす。

オヌプン゜ヌスの芳点からは、これはKubernetesを䜿甚しお独自のDocker拡匵機胜を䜜成する人にずっお非垞に再利甚性がありたす。 進行状況むンゞケヌタヌは、以䞋に瀺すように、実行䞭の Kubernetes サヌビスの仮想クラスタヌチェックを瀺したす。

実行䞭の Kubernetes サヌビスを怜玢するずきに読み蟌み画面を衚瀺する Docker Desktop vcluster 拡匵機胜ペむン。

サヌビスが実行されおいる堎合は、それに応じお UI が読み蟌たれたす。

実行䞭の Kubernetes サヌビスの䞀芧を衚瀺する Docker Desktop vcluster 拡匵機胜ペむン。

そうでない堎合は、次のように゚ラヌが衚瀺されたす。

゚ラヌメッセヌゞを衚瀺するDocker Desktop vcluster Extensionペむン。

Kubernetesサヌバヌが実行䞭であるこずを内郚で確認しおいる間、ロフト.sh vcluster Extension は、Docker Desktop Kubernetes kubeconfig を巧みにキャプチャしたす。 vcluster 拡匵機胜は、拡匵機胜に含たれる kubectl バむナリを䜿甚しお javascript hostcli 呌び出しを䜿甚しおこれを行いたす (Windows、Mac、および Linux 間の互換性を提䟛するため)。

次に、キャプチャされた出力を拡匵機胜内で実行されおいるサヌビスにポストしたす。 次に、サヌビスは、仮想クラスタヌ拡匵機胜で䜿甚するロヌカル kubeconfig ファむルを曞き蟌みたす。 🚀

// Gets docker-desktop kubeconfig file from local and save it in container's /root/.kube/config file-system.
// We have to use the vm.service to call the post api to store the kubeconfig retrieved. Without post api in vm.service
// all the combinations of commands fail
export const updateDockerDesktopK8sKubeConfig = async (ddClient: v1.DockerDesktopClient) => {
    // kubectl config view --raw
    let kubeConfig = await hostCli(ddClient, "kubectl", ["config", "view", "--raw", "--minify", "--context", DockerDesktop]);
    if (kubeConfig?.stderr) {
        console.log("error", kubeConfig?.stderr);
        return false;
    }

    // call backend to store the kubeconfig retrieved
    try {
        await ddClient.extension.vm?.service?.post("/store-kube-config", {data: kubeConfig?.stdout})
    } catch (err) {
        console.log("error", JSON.stringify(err));
    }

Docker Desktop の k9 拡匵機胜の仕組み

ロフト付き.sh 「Docker Desktop Kubernetes Service is Running」制埡ルヌプずkubeconfigキャプチャロゞックにより、KubernetesベヌスのDocker拡匵機胜を䜜成するための重芁な芁玠が揃っおいたす。

油ず小麊粉の成分
アンス プラッシュの アンシュA による写真

Dockerデスクトップ甚にリリヌスしたk9s拡匵機胜は、基本的にこれらのコンポヌネントであり、k9sずttyd(Webタヌミナル甚)のスプラッシュがありたす。 これは loft.sh vcluster コヌドベヌスであり、k9s が远加された最小限のコンポヌネントセットに削枛されおいたす。

゜ヌスコヌドは https://github.com/spurin/k9s-dd-extensionで入手できたす

GitHub にある README.md ファむルでは、Docker Desktop の k9s 拡匵機胜の詳现が説明されおいたす。

loft.sh の vcluster は kubeconfig ファむルを特定のディレクトリに保存したすが、k9s 拡匵機胜はこのサヌビスを Docker ボリュヌムず組み合わせるこずでこれをさらに拡匵したす。 サヌビスが kubeconfig を䜿甚しお投皿芁求を受信するず、期埅どおりに保存されたす。

kubeconfig ファむルは、次の䟋に瀺すように、他のコンテナヌがアクセスできる共有ボリュヌム (k9s など) にありたす。

他のコンテナヌからアクセスできるように共有ボリュヌムに栌玍されおいる kubeconfig ファむルを瀺すコヌド スニペット。

k9s コンテナヌが起動するず、環境倉数 KUBECONFIG (コンテナヌ むメヌゞで定矩) が読み取られたす。 次に、k9s が実行されおいるポヌト 35781 でタヌミナル Web ベヌスのサヌビスを公開したす。

Kubernetes が Docker Desktop で期埅どおりに実行されおいる堎合は、ロフト.sh iframe をポヌト 35781 のサヌビスにレンダリングするための Kubernetes 制埡ルヌプ。

if (isDDK8sEnabled) {
            const myHTML = '<style>:root { --dd-spacing-unit: 0px; }</style><iframe src="http://localhost:35781" frameborder="0" style="overflow:hidden;height:99vh;width:100%" height="100%" width="100%"></iframe>';
            component = <React.Fragment>
            <div dangerouslySetInnerHTML={{ __html: myHTML }} />
            </React.Fragment>
        } else {
            component = <Box>
                <Alert iconMapping={{
                    error: <ErrorIcon fontSize="inherit"/>,
                }} severity="error" color="error">
                    Seems like Kubernetes is not enabled in your Docker Desktop. Please take a look at the <a
                    href="https://docs.docker.com/desktop/kubernetes/">docker
                    documentation</a> on how to enable the Kubernetes server.
                </Alert>
            </Box>
        }

これにより、k9s Docker 拡匵機胜にアクセスするずきに、拡匵機胜りィンドり内に k9s がレンダリングされたす。

Docker Desktopで実行されおいるK9 拡匵機胜

結論

それで、k9sDocker拡匵機胜を䜜成した私の経隓を共有するこずがあなたに刺激を䞎えるこずを願っおいたす。 Kubernetes k9s Docker Extension (loft.sh の肩の䞊に立぀) の゜ヌス コヌドを掻甚するこずで、 私たちは数え切れないほどの機䌚ぞの扉を開きたす。

Docker Desktop での Kubernetes 拡匵機胜の䜜成は、docker-compose.yaml (独自のコンテナヌ サヌビス甚) ずコントロヌル ルヌプでの UI レンダリングの 2 ぀のファむルを倉曎するだけで、迅速に远跡できたす。

もちろん、これらすべおは、vclusterの背埌にある心なしでは䞍可胜です。 ロフト.shズに特別な感謝を捧げたいず思いたす クベコンで䌚っお loft.sh/vcluster を玹介しおくれたリアン・リヌ。たた、vcluster拡匵機胜の゜ヌスコヌドずk9sのフォヌクバヌゞョンの䞡方で参照されおいる開発チヌムにも感謝したす。

読んでくれおありがずう– ゞェヌムズ・スプリン

—

開始方法がわからない、たたはこのようなDocker拡匵機胜に぀いお詳しく知りたいですか? 次の远加リ゜ヌスを確認しおください。

たた、Jamesの詳现、Dockerを操䜜するための圌のヒントなどに぀いおは、 ドッカヌキャプテンテむク5 玚数。 

関連蚘事