ãã®ã²ã¹ãæçš¿ã¯ãDockerãã£ããã³ã®1人ã®å¥œæã«ãããã®ã§ãã DiveIntoã®DevOpsã³ã³ãµã«ã¿ã³ãå Œã³ãŒã¹/ã³ã³ãã³ãã¯ãªãšãŒã¿ãŒã§ããJames Spurinã¯ãKubernetesæ¡åŒµæ©èœãäœæããçµéšãæãåºããŸãã Docker Desktop.ãã¡ããããã¹ãŠã®æ ã«ã¯èª²é¡ããããŸããã ããããloft.sh vcluster æ¡åŒµæ©èœã®åŒ·åãªãªãŒãã³ãœãŒã¹ã®å©ç¹ã掻çšã§ããããšã¯ãåªåãã䟡å€ããããŸããã

Docker Desktop ã§ç¬èªã® Kubernetes æ¡åŒµæ©èœãäœæããã«ã¯äœãå¿ èŠãçåã«æã£ãããšã¯ãããŸããã? ãã®ããã°ã§ã¯ãk9s Docker æ¡åŒµæ©èœã®äœæäžã«åŠãã æé ãšæèšãããã³éèŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã³ããŒãã³ããšã㊠vcluster æ¡åŒµæ©èœã®ä¿¡ããããªãã»ã© loft.sh ãªãŒãã³ãœãŒã¹ã®åãçµã¿ãã©ã®ããã«æŽ»çšãããã«ã€ããŠèª¬æããŸãã

ãªã Kubernetes Docker æ¡åŒµæ©èœãæ§ç¯ããã®ã§ãã?
ç§ãæåã«Dockeræ¡åŒµæ©èœã«ééãããšããç§ã¯çåã«æããŸãã:
ãDocker Extensions ã䜿çšããŠãDocker Desktop ã§æäŸãããçµã¿èŸŒã¿ã® Docker ãããŒãžã Kubernetes ãµãŒããŒãšéä¿¡ã§ããŸãã?ã
Dockeræ¡åŒµæ©èœã¯ã[æ¡åŒµæ©èœ]ãã€ã³å ã®äŸ¿å©ãªãã«ã¹ã¿ãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§å€ãã®æ©äŒãéããŸãã
åŸæ¥ãDocker ã䜿çšããå ŽåãUI ãŸã㯠CLI ã䜿çšããŠã³ã³ãããŒãå®è¡ããŠããŸããã æ¬¡ã«ãã³ã³ãããŒã®ãµãŒãã¹ ããŒã (8080 ãªã©) ããã¹ã ã·ã¹ãã ã«å ¬éããŸãã æ¬¡ã«ãhttp://localhost:8080 ãªã©ã® URL ã䜿çšã㊠Web ãã©ãŠã¶ãŒçµç±ã§ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ããŸãã

UI / CLIã¯ãããæ¯èŒçã·ã³ãã«ã«ããŸãããããã«ã¯ãç°ãªãã³ã³ããŒãã³ããã€ãŸãDockerãã¹ã¯ããããšWebãã©ãŠã¶ãŒéã®è€æ°ã®ã¹ããããå«ãŸããŸãã ãŸãããµãŒãã¹ãåèµ·åãããããã©ãŠã¶ãéãããã³ã«ããããã®æé ãç¹°ãè¿ãå¿ èŠãããå ŽåããããŸãã
Dockeræ¡åŒµæ©èœã¯ãDockerããã·ã¥ããŒããä»ããŠããã¯ãšã³ããµãŒãã¹ãèŠèŠåã§ããããã«ããããšã§ããã®åé¡ã解決ããŸãã

Docker DesktopãDocker ExtensionsãKubernetesãçµã¿åãããããšã§ãããã«å€ãã®æ©äŒãéãããŸãã ãã®ããŒã«ã»ããã䜿çšãããšãéçºã®åææ®µéããã³ã³ãããŒã®äœæãå®è¡ããã¹ããKubernetes ã䜿çšããã³ã³ãã㌠ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã«è³ããŸã§ãDocker Desktop ãçç£çã«æŽ»çšã§ããŸãã

k9sæ¡åŒµæ©èœã®äœæã«é¢ãã課é¡
ãããå®éã«ç¢ºèªãããã£ãã®ã§ãçµã¿èŸŒã¿ã®KubernetesãµãŒããŒã§Dockerãã¹ã¯ããããæŽ»çšããããŸããŸãªæ¹æ³ã詊ããŸããã æçµçã«ãç§ã¯ã®ã£ãããåããKubernetesã«Dockeræ¡åŒµæ©èœãžã®ã¢ã¯ã»ã¹ãæäŸããããšãã§ããŸããã
åœæãããã«ã¯ç¹æš©ã³ã³ãããå¿ èŠã§ãããã»ãã¥ãªãã£äžã®ãªã¹ã¯ããããŸããã ãã®çµæããã®ã¢ãããŒãã¯çæ³çã§ã¯ãªããç§ãå¿«é©ã«å ±æã§ãããã®ã§ã¯ãããŸããã§ãã...

ãããããã«è©³ããèŠãŠãããŸãããã
Docker Desktop ã¯ãé衚瀺ã®ä»®æ³ãã·ã³ã䜿çšã㊠Docker ãå®è¡ããŸãã ãŸãããã®ã€ã³ã¹ã¿ã³ã¹å ã«ã¯ãkubeadm ãä»ããŠãããã€ããã Docker ãããŒãžã Kubernetes ã€ã³ã¹ã¿ã³ã¹ããããŸãã

Docker Desktop ã¯ããŠãŒã¶ãŒã®ããŒã é åå ã§ããŒã«ã«ã®äºåæ§æããã kubeconfig ãã¡ã€ã«ãš kubectl ã³ãã³ãããŠãŒã¶ãŒã«äŸ¿å©ã«æäŸããŸãã ããã«ãããKubernetes ãžã®ã¢ã¯ã»ã¹ã®æéã軜æžãããŸãã ããã¯æ©èœããDockerã®äŸ¿å©ãããKubernetesãæŽ»çšããããšããŠãã人ã«ãšã£ãŠã¢ã¯ã»ã¹ãè¿ éã«è¿œè·¡ããããã®çŽ æŽãããæ¹æ³ã§ãã
ãã ãããã®åçŽãã¯ãæ¡åŒµæ©èœã®èгç¹ããããã€ãã®èª²é¡ããããããŸãã å ·äœçã«ã¯ãçµã¿èŸŒã¿ã® Kubernetes ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®é©å㪠kubeconfig ãã¡ã€ã«ã Docker æ¡åŒµæ©èœã«æäŸããæ¹æ³ãèŠã€ããå¿ èŠããããŸãã
loft.sh ãšä»®æ³ã¯ã©ã¹ã¿ãŒã䜿çšãããœãªã¥ãŒã·ã§ã³ã®æ€çŽ¢
幞ããªããšã«ãloft.sh ãšvclusterã®ããŒã ã¯ãã®èª²é¡ã«å¯ŸåŠããããšãã§ããŸããã 圌ãã®åªåã¯ãDocker Desktopã§KubernetesããŒã¹ã®æ¡åŒµæ©èœãäœæããããšããŠãã人ã ã«åŒ·åºãªåºç€ãæäŸããŸãã

ä»®æ³ã¯ã©ã¹ã¿ãŒã® Docker æ¡åŒµæ©èœãèµ·åãããšãDocker Desktop ã Kubernetes ãå®è¡ããŠããããšã確èªããå¶åŸ¡ã«ãŒãã䜿çšãããŠããããšãããããŸãã
ãªãŒãã³ãœãŒã¹ã®èгç¹ããã¯ãããã¯Kubernetesã䜿çšããŠç¬èªã®Dockeræ¡åŒµæ©èœãäœæãã人ã«ãšã£ãŠéåžžã«åå©çšæ§ããããŸãã é²è¡ç¶æ³ã€ã³ãžã±ãŒã¿ãŒã¯ã以äžã«ç€ºãããã«ãå®è¡äžã® Kubernetes ãµãŒãã¹ã®ä»®æ³ã¯ã©ã¹ã¿ãŒãã§ãã¯ã瀺ããŸãã

ãµãŒãã¹ãå®è¡ãããŠããå Žåã¯ãããã«å¿ã㊠UI ãèªã¿èŸŒãŸããŸãã

ããã§ãªãå Žåã¯ã次ã®ããã«ãšã©ãŒã衚瀺ãããŸãã

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æ¡åŒµæ©èœãäœæããããã®éèŠãªèŠçŽ ãæã£ãŠããŸãã

Dockerãã¹ã¯ãããçšã«ãªãªãŒã¹ããk9sæ¡åŒµæ©èœã¯ãåºæ¬çã«ãããã®ã³ã³ããŒãã³ãã§ãããk9sãšttyd(Webã¿ãŒããã«çš)ã®ã¹ãã©ãã·ã¥ããããŸãã ãã㯠loft.sh vcluster ã³ãŒãããŒã¹ã§ãããk9s ã远å ãããæå°éã®ã³ã³ããŒãã³ãã»ããã«åæžãããŠããŸãã
ãœãŒã¹ã³ãŒã㯠https://github.com/spurin/k9s-dd-extensionã§å ¥æã§ããŸã

loft.sh ã® vcluster 㯠kubeconfig ãã¡ã€ã«ãç¹å®ã®ãã£ã¬ã¯ããªã«ä¿åããŸãããk9s æ¡åŒµæ©èœã¯ãã®ãµãŒãã¹ã Docker ããªã¥ãŒã ãšçµã¿åãããããšã§ãããããã«æ¡åŒµããŸãã ãµãŒãã¹ã kubeconfig ã䜿çšããŠæçš¿èŠæ±ãåä¿¡ãããšãæåŸ ã©ããã«ä¿åãããŸãã
kubeconfig ãã¡ã€ã«ã¯ã次ã®äŸã«ç€ºãããã«ãä»ã®ã³ã³ãããŒãã¢ã¯ã»ã¹ã§ããå ±æããªã¥ãŒã (k9s ãªã©) ã«ãããŸãã

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 ãã¬ã³ããªã³ã°ãããŸãã

çµè«
ããã§ãk9sDockeræ¡åŒµæ©èœãäœæããç§ã®çµéšãå ±æããããšãããªãã«åºæ¿ãäžããããšãé¡ã£ãŠããŸãã Kubernetes k9s Docker Extension (loft.sh ã®è©ã®äžã«ç«ã€) ã®ãœãŒã¹ ã³ãŒããæŽ»çšããããšã§ã ç§ãã¡ã¯æ°ãåããªãã»ã©ã®æ©äŒãžã®æãéããŸãã
Docker Desktop ã§ã® Kubernetes æ¡åŒµæ©èœã®äœæã¯ãdocker-compose.yaml (ç¬èªã®ã³ã³ãã㌠ãµãŒãã¹çš) ãšã³ã³ãããŒã« ã«ãŒãã§ã® UI ã¬ã³ããªã³ã°ã® 2 ã€ã®ãã¡ã€ã«ã倿Žããã ãã§ãè¿ éã«è¿œè·¡ã§ããŸãã
ãã¡ãããããããã¹ãŠã¯ãvclusterã®èåŸã«ããå¿ãªãã§ã¯äžå¯èœã§ãã ããã.shãºã«ç¹å¥ãªæè¬ãæ§ããããšæããŸã ã¯ãã³ã³ã§äŒã£ãŠ loft.sh/vcluster ã玹ä»ããŠããããªã¢ã³ã»ãªãŒããŸããvclusteræ¡åŒµæ©èœã®ãœãŒã¹ã³ãŒããšk9sã®ãã©ãŒã¯ããŒãžã§ã³ã®äž¡æ¹ã§åç §ãããŠããéçºããŒã ã«ãæè¬ããŸãã
èªãã§ãããŠããããšãâ ãžã§ãŒã ãºã»ã¹ããªã³
â
éå§æ¹æ³ãããããªãããŸãã¯ãã®ãããªDockeræ¡åŒµæ©èœã«ã€ããŠè©³ããç¥ãããã§ãã? 次ã®è¿œå ãªãœãŒã¹ã確èªããŠãã ããã
- æ¹æ³ãåŠã¶ ç¬èªã®ããã«ãŒæ¡åŒµæ©èœãäœæãã.Â
- ã¯ããã« ããã«ãŒãã¹ã¯ãããã®ã€ã³ã¹ããŒã« MacãWindowsããŸãã¯Linuxçšã
- ã«ããŒããåæ§ã®ããã°ãèªã Docker Extensions.
- 詳现ã«ã€ããŠã¯ã loft.sh. Â
ãŸããJamesã®è©³çްãDockerãæäœããããã®åœŒã®ãã³ããªã©ã«ã€ããŠã¯ã ããã«ãŒãã£ããã³ãã€ã¯5 çŽæ°ãÂ