仅需要一个选项:仅使用GitHub帐户!学习如何使用Codespaces入门Kubernetes
首先
Codespaces是由GitHub提供的云开发环境 [1] 。您可以免费使用Ubuntu 20.04虚拟机和在web上运行的VSCode 。无需信用卡注册,使用每月的免费配额后,它会自动停止,非常安全[2]。
因为在Codespaces中可以使用虚拟机,所以可以进行几乎所有编程语言的开发。利用这种灵活性和便捷性,我想写一篇关于Kubernetes入门的文章。
-
- 创建GitHub账号
-
- 启动Codespaces
-
- 使用Minikube搭建环境
- Kubernetes初学者入门
1. 创建一个Github账号
请在Join GitHub上创建一个GitHub账号。
2. 启动Codespaces
根据公式快速入门指南进行参考和实践。
Codespacesは設定が含まれたGitHubリポジトリから起動します。公式テンプレートリポジトリに移動します。
ログインしていると、[User this template]ボタンがされているはずです。クリックしさらに[Open in a codespace]を選択します。
只需要这一个就能启动一个可用的终端开发环境。VSCode的使用体验与应用程序版本没有差别。
ターミナルでpwdコマンドやlsコマンドを実行してみます。チュートリアルではnodeJSで構築されたデモアプリケーションが含まれており、pachage.jsonなどが確認できます。
请尝试启动演示应用程序。请执行npm run dev命令。然后,会弹出”在浏览器中打开”的弹窗,请点击它。
すると、別タブで簡単にデモアプリケーションにアクセスできます。
VSCodeに戻り、ターミナルタブの隣のポートタブをクリックします。すると起動中のポートが確認できます。初期設定ではPrivateとなっているため、同じGithubアカウントでログインしたブラウザのみアクセスできます。これを右クリックでPublicとすると一時的に公開することもできます。
3. 使用Minikube来建立环境
本次使用Minikube来学习Kubernetes初级知识。
根据官方文档进行环境搭建。
下载并安装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
4. Kubernetes 初学者入门
それでは、Kubernetesで最も使われるPod, Deployment, Serviceを作成します。
Kubernetes Pod は、1 つ以上の Linux® コンテナの集合体で、Kubernetes アプリケーションの最小単位です。[4] 一般的には1Pod、1コンテナとなるケースが多いため、初めのうちはPod=コンテナと理解してよいと思います。
搭建Nginx。
创建一个用于作业的目录。
mkdir /workspaces/k8s-workshop
在VSCode中打开已创建的工作目录。
创建test_pod.yaml文件。以后,使用VSCode的资源管理器和编辑器来进行文件编辑会很方便。
以下内容的描述。起初可能会感到冗长,但这是使用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
提交申请书。
@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
点击”在浏览器中打开”弹窗。
然后您可以在另一个标签页中确认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