仅需要一个选项:仅使用GitHub帐户!学习如何使用Codespaces入门Kubernetes

首先

Codespaces是由GitHub提供的云开发环境 [1] 。您可以免费使用Ubuntu 20.04虚拟机和在web上运行的VSCode 。无需信用卡注册,使用每月的免费配额后,它会自动停止,非常安全[2]。

image.png

因为在Codespaces中可以使用虚拟机,所以可以进行几乎所有编程语言的开发。利用这种灵活性和便捷性,我想写一篇关于Kubernetes入门的文章。

    1. 创建GitHub账号

 

    1. 启动Codespaces

 

    1. 使用Minikube搭建环境

 

    Kubernetes初学者入门

1. 创建一个Github账号

请在Join GitHub上创建一个GitHub账号。

2. 启动Codespaces

根据公式快速入门指南进行参考和实践。

Codespacesは設定が含まれたGitHubリポジトリから起動します。公式テンプレートリポジトリに移動します。

ログインしていると、[User this template]ボタンがされているはずです。クリックしさらに[Open in a codespace]を選択します。

スクリーンショット 2023-06-27 213905.png

只需要这一个就能启动一个可用的终端开发环境。VSCode的使用体验与应用程序版本没有差别。

image.png

ターミナルでpwdコマンドやlsコマンドを実行してみます。チュートリアルではnodeJSで構築されたデモアプリケーションが含まれており、pachage.jsonなどが確認できます。

image.png

请尝试启动演示应用程序。请执行npm run dev命令。然后,会弹出”在浏览器中打开”的弹窗,请点击它。

image.png

すると、別タブで簡単にデモアプリケーションにアクセスできます。

image.png

VSCodeに戻り、ターミナルタブの隣のポートタブをクリックします。すると起動中のポートが確認できます。初期設定ではPrivateとなっているため、同じGithubアカウントでログインしたブラウザのみアクセスできます。これを右クリックでPublicとすると一時的に公開することもできます。

image.png

3. 使用Minikube来建立环境

本次使用Minikube来学习Kubernetes初级知识。

Minikube是一种可以在本地运行的Kubernetes,重点是便于学习和开发Kubernetes。只需要Docker或虚拟机执行环境即可。

根据官方文档进行环境搭建。

下载并安装Debian软件包。你也可以复制粘贴到浏览器版的VSCode上。

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb

我会确认是否安装成功。

@abek15 ➜ /workspaces/haikus-for-codespaces (main) $ minikube version
minikube version: v1.30.1
commit: 08896fd1dc362c097c925146c4a0d0dac715ace0

使用minikube start命令启动minikube。由于此Codesapce模板已经安装了Docker,因此将开始拉取Docker镜像等操作。

@abek15 ➜ /workspaces/haikus-for-codespaces (main) $ minikube start
?  minikube v1.30.1 on Ubuntu 20.04 (docker/amd64)
✨  Automatically selected the docker driver. Other choices: ssh, none
?  Using Docker driver with root privileges
?  Starting control plane node minikube in cluster minikube
?  Pulling base image ...
?  Downloading Kubernetes v1.26.3 preload ...
    > preloaded-images-k8s-v18-v1...:  397.02 MiB / 397.02 MiB  100.00% 22.47 M
    > gcr.io/k8s-minikube/kicbase...:  373.53 MiB / 373.53 MiB  100.00% 7.81 Mi
?  Creating docker container (CPUs=2, Memory=2200MB) ...
?  Preparing Kubernetes v1.26.3 on Docker 23.0.2 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
?  Configuring bridge CNI (Container Networking Interface) ...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
?  Verifying Kubernetes components...
?  Enabled addons: storage-provisioner, default-storageclass
?  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

当启动完成后,请执行 “kubectl get nodes” 命令。然后您将确认集群已在单节点上构建成功。

@abek15 ➜ /workspaces/haikus-for-codespaces (main) $ kubectl get nodes
NAME       STATUS   ROLES           AGE    VERSION
minikube   Ready    control-plane   117s   v1.26.3
kubectl命令与Docker中的docker命令相同,用于操作Kubernetes。该命令可用于启动、删除和查看Pod的日志,以及执行集群操作等几乎所有操作。

4. Kubernetes 初学者入门

それでは、Kubernetesで最も使われるPod, Deployment, Serviceを作成します。

Kubernetes Pod は、1 つ以上の Linux® コンテナの集合体で、Kubernetes アプリケーションの最小単位です。[4] 一般的には1Pod、1コンテナとなるケースが多いため、初めのうちはPod=コンテナと理解してよいと思います。

搭建Nginx。

创建一个用于作业的目录。

mkdir /workspaces/k8s-workshop

在VSCode中打开已创建的工作目录。

image.png

创建test_pod.yaml文件。以后,使用VSCode的资源管理器和编辑器来进行文件编辑会很方便。

image.png

以下内容的描述。起初可能会感到冗长,但这是使用Kubernetes架构所必需的描述。在Kubernetes中,我们使用YAML文件(清单)来定义资源。

apiVersion: v1
# リソースの種類
kind: Pod
metadata:
  name: test-pod
  labels:
    app: test-app
spec:
  containers:
    # Pod内で起動するコンテナの情報
    - name: web
      image: nginx:1.25.1 # dockerでのイメージ指定と同様
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

现在,将Pod的清单应用到集群中。

@abek15 ➜ /workspaces/k8s-workshop $ kubectl apply  -f test_pod.yaml 
pod/test-pod created

检查是否已创建Pod。如果test-pod已处于运行状态,则表示正常。

@abek15 ➜ /workspaces/k8s-workshop $ kubectl get pod 
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          58s

虽然容器已经创建成功,但是在这种状态下无法从集群外部访问。因此,我们可以使用 Service 资源来使得 Pod 可以从集群外部访问。

apiVersion: v1
kind: Service
metadata:
  name: test-service
  labels:
    app: test-app
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 30080
    protocol: TCP
  selector:
    app: test-app
targetPort: 根据容器启动的应用程序端口进行指定。通常使用80/tcp等常用端口。port: 在Pod之间进行通信时使用的端口,可以自由指定。通常使用8000+常见端口的惯例较多。设置type: nodePort并指定nodePort:,在Kubernetes节点主机上启动30080/tcp端口,并将流量转发到容器内部。

提交申请书。

@abek15 ➜ /workspaces/k8s-workshop $ kubectl apply  -f test_service.yaml 
service/test-service created

由于本次使用minikube,因此我们将获取minikube节点的信息。通过运行minikube service –all命令,可以确认节点的IP地址为192.168.49.2。访问http://192.168.49.2:30080即可访问服务。

@abek15 ➜ /workspaces/k8s-workshop $ minikube service --all
|-----------|------------|-------------|--------------|
| NAMESPACE |    NAME    | TARGET PORT |     URL      |
|-----------|------------|-------------|--------------|
| default   | kubernetes |             | No node port |
|-----------|------------|-------------|--------------|
?  service default/kubernetes has no node port
|-----------|--------------|-------------|---------------------------|
| NAMESPACE |     NAME     | TARGET PORT |            URL            |
|-----------|--------------|-------------|---------------------------|
| default   | test-service |        8080 | http://192.168.49.2:30080 |
|-----------|--------------|-------------|---------------------------|
?  Opening service default/test-service in default browser...
?  http://192.168.49.2:30080

当使用curl命令进行确认时,可以确定Nginx已按预期启动。

@abek15 ➜ /workspaces/k8s-workshop $ curl http://192.168.49.2:30080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

我想在浏览器中确认一下,但无法直接连接到Codespaces环境的IP(192.168.49.2),所以我将使用kubectl命令进行端口转发。

@abek15 ➜ /workspaces/k8s-workshop $ kubectl port-forward service/test-service 8080:8080
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

点击”在浏览器中打开”弹窗。

image.png

然后您可以在另一个标签页中确认Nginx。

最后

我使用Codespaces构建了一个Kubernetes环境,并启动了最小的资源单元Pod。我希望通过仅使用Github账号就能够进行操作,降低Kubernetes入门门槛。

基于此次文章的便捷体验,我们省略了详细的解释。建议您查找kubectl、namespace、deployment、label等感兴趣的关键词,并在您创建的环境中进行尝试。

主題ではありませんが、Codesapcesを利用すると、OSや権限によらず、一律な環境を利用できるため、学習やハンズオンに最適だと感じました。

请看此处

    • [1] Github, “Codespaces”, https://github.co.jp/features/codespaces

[2] Github, “GitHub Codespaces の請求について”, https://docs.github.com/ja/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts

[3] The Kubernetes Authors, “minikube start”, https://minikube.sigs.k8s.io/docs/start/

[4] Red Hat, “Inc., What is a Kubernetes pod?”, https://www.redhat.com/en/topics/containers/what-is-kubernetes-pod

广告
将在 10 秒后关闭
bannerAds