在Catacoda上学习K8s基础(适合初学者)- 第一部分

学习使用Kubernetes(k8s)

在本页面上,我们将使用名为katacoda的“可以在浏览器上免费启动学习实例的Web服务”来进行Kubernetes入门的实践。有关详细内容,请参考上述链接,如果有任何疑问,请参考那里。

启动一个单节点集群

在这里,我们将学习如何启动包含DNS和Kube UI的单节点Minikube集群。
Minikube是一个可以在本地轻松运行Kubernetes的工具。它在笔记本电脑的虚拟机内运行单节点的Kubernetes集群。
如果您想快速了解在这个场景中要学习的内容,请查看概述。

总结

    • ローカル環境でk8sのシングルクラスターを構築可能

 

    • クラスタの構築には、minikube startを用いる

 

    • k8sクラスタの管理には、kubectlを利用。kubectl cluster-infoコマンドでクラスタの情報を確認できる

 

    • それぞれのリソースの情報を確認する際は、kubectl get で確認(には、pods,service,deployment,nodesが当てはまる)

 

    • minikubeには、k8sマルチクラスタ同様アドオン機能が用意されている

アドオン機能の操作にはminikube addons <操作内容(list,enable dashboard 等)>で利用

启动Minikube

在本环境中,Minikube已经被下载并完成了初始设置。按照下面的命令,首先通过minikube version确认已下载的minikube信息,然后使用minikube start来部署单一集群。minikube start使用了选项–wait,并指定了要验证的元素,包括”apiserver,system_pods,default_sa,apps_running,node_ready,kubelet”,该选项能决定在启动集群之前是否完成指定要素的验证。默认情况下,将进行”apiserver,system_pods”的验证。

$ pwd
/root
$ minikube version
minikube version: v1.8.1
commit: cbda04cf6bbe65e987ae52bb393c10099ab62014
$ tree .minikube/
.minikube/
├── addons
├── apiserver.crt
├── apiserver.key
├── cache
│   ├── iso
│   ├── linux
│   │   └── v1.17.3
│   │       ├── kubeadm
│   │       ├── kubectl
│   │       └── kubelet
│   └── preloaded-tarball
│       ├── preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4
│       └── preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4.checksum
├── ca.crt
├── ca.key
├── certs
│   ├── ca-key.pem
│   ├── ca.pem
│   ├── cert.pem
│   └── key.pem
├── client.crt
├── client.key
├── config
│   └── config.json
├── files
├── logs
├── machines
├── profiles
├── proxy-client-ca.crt
├── proxy-client-ca.key
├── proxy-client.crt
└── proxy-client.key

12 directories, 20 files
$ ls -a
.  ..  .bashrc  .cache  .config  Desktop  .docker  .gnupg  .hushlogin  .minikube  .profile  .ssh  .vnc  .vscode
$ minikube start --wait=false
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
  - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Done! kubectl is now configured to use "minikube"
$ 

确认Cluster信息

使用kubectl CLI来管理k8s集群。
检查部署好的k8s集群的详细信息和状态,并确认节点的状态如下所示。

$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.21:8443
KubeDNS is running at https://172.17.0.21:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   11m   v1.17.3

容器的部署

在这里,在正在运行的集群中执行容器。
在容器启动时,使用deployment资源代替pod。
与pod不同,deployment可以管理版本控制和副本数。请参考此处以了解更多。
当前状态如下所示。

$ kubectl get deployment
No resources found in default namespace.
$ kubectl get pods
No resources found in default namespace.
$ docker image ls | grep docker-http-server

从上述命令可以发现,图像不存在于本地注册表中。

$ kubectl create deployment first-deployment --image=katacoda/docker-http-server
deployment.apps/first-deployment created
$ kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
first-deployment-666c48b44-szjwz   1/1     Running   0          6s
$ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
first-deployment   1/1     1            1           17s
$ docker images ls | grep docker-http-server
$ docker image ls | grep docker-http-server
katacoda/docker-http-server                     latest              0d6ee549ae13        4 years ago         7.59MB

通过创建部署对象,可以启动Pod并确认镜像已经在其内部下载完毕。

当容器被执行时,可以通过不同的网络选项来公开,以满足需求。一个可能的解决方案是为容器提供动态端口的 NodePort。

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   17m
$ kubectl expose deployment first-deployment --port=80 --type=NodePort
service/first-deployment exposed
$ kubectl get svc
NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
first-deployment   NodePort    10.97.89.102   <none>        80:32550/TCP   9s
kubernetes         ClusterIP   10.96.0.1      <none>        443/TCP        17m

通过此链接可以确认容器的连接状态

$ export PORT=$(kubectl get svc first-deployment -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
$ echo "Accessing host01:$PORT"
Accessing host01:32550
$ curl host01:$PORT
<h1>This request was processed by host: first-deployment-666c48b44-szjwz</h1>

仪表盘的使用

在minikube上添加dashboard功能以便使用仪表盘。

$ minikube addons list
|-----------------------------|----------|--------------|
|         ADDON NAME          | PROFILE  |    STATUS    |
|-----------------------------|----------|--------------|
| dashboard                   | minikube | disabled     |
| default-storageclass        | minikube | enabled ✅   |
| efk                         | minikube | disabled     |
| freshpod                    | minikube | disabled     |
| gvisor                      | minikube | disabled     || helm-tiller                 | minikube | disabled     |
| ingress                     | minikube | disabled     |
| ingress-dns                 | minikube | disabled     |
| istio                       | minikube | disabled     || istio-provisioner           | minikube | disabled     |
| logviewer                   | minikube | disabled     |
| metrics-server              | minikube | disabled     |
| nvidia-driver-installer     | minikube | disabled     || nvidia-gpu-device-plugin    | minikube | disabled     |
| registry                    | minikube | disabled     |
| registry-creds              | minikube | disabled     |
| storage-provisioner         | minikube | enabled ✅   || storage-provisioner-gluster | minikube | disabled     |
|-----------------------------|----------|--------------|
$ minikube addons enable dashboard
* The 'dashboard' addon is enabled$ minikube addons list | grep dashboard
| dashboard                   | minikube | enabled ✅   |

请部署以下的YAML定义,以便可以在Kubernetes仪表板上使用。这仅需要在Katacoda上使用。

apiVersion: v1
kind: Namespace
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/minikube-addons: dashboard
  name: kubernetes-dashboard
  selfLink: /api/v1/namespaces/kubernetes-dashboard
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-katacoda
  namespace: kubernetes-dashboard
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

在 Kubernetes 控制台上,可以通过用户界面展示应用程序。在本次部署中,可以通过30000端口访问控制台。

为了启动仪表板并进行确认,请执行以下命令。

$ kubectl apply -f /opt/kubernetes-dashboard.yaml
namespace/kubernetes-dashboard configured
service/kubernetes-dashboard-katacoda created
$ kubectl get svc
NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
first-deployment   NodePort    10.97.89.102   <none>        80:32550/TCP   35m
kubernetes         ClusterIP   10.96.0.1      <none>        443/TCP        52m
$ kubectl get pods -n kubernetes-dashboard -w
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7b64584c5c-6sfk7   1/1     Running   0          6m30s
kubernetes-dashboard-79d9cd965-pf4mv         1/1     Running   0          6m29s
image.png
广告
将在 10 秒后关闭
bannerAds