最近在学习Kubernetes(k8s)的使用,发现了一个好网站katacoda,可以在浏览器的沙盒环境中学习k8s的使用和概念,真的是非常友好了。因此做下笔记,以后可以回顾。
这是该系列入门的第一篇,使用的是Minikube。Minikube可以在本地虚拟机中运行一个单节点的Kubernetes集群,以便用户学习。更多可以关注 https://github.com/kubernetes/minikube。
Step 1 启动Minikube
在katacoda中,Minikube已经被预先安装并且被配置好了。使用以下命令查看版本
minikube version
使用以下命令启动Minkube
minikube start --wait=false
Step 2 集群信息
我们可以通过kubectl
CLI 与集群交互,这是管理k8s集群并且运行应用的主要方式。
集群的详细信息和健康状况可以从如下命令得到
kubectl cluster-info
可以看到如下结果
Kubernetes master is running at https://172.17.0.14:8443
KubeDNS is running at https://172.17.0.14:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
如果想查看节点信息,可以使用如下命令
kubectl get nodes
可以看到如下结果
NAME STATUS ROLES AGE VERSION
minikube Ready master 2m39s v1.17.3
该命令显示所有能承载我们应用的节点。此时我们只有1个节点,并且可以看到其状态是Ready,表示已经准备好接收应用的部署。
Step 3 部署容器
有一个运行的Kubernetes集群后,就可以部署容器了。
使用kubectl run
命令将容器部署到集群中。
kubectl create deployment first-deployment --image=katacoda/docker-http-server
其中,kubectrl create deployment
表示创建具有指定名称的deployment部署。
deployment NAME --image=image [--dry-run]
部署的状态可以从运行的Pods中被查看
kubectl get pods
结果如下
NAME READY STATUS RESTARTS AGE
first-deployment-666c48b44-74w54 1/1 Running 0 7m2s
Pods简介
在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。
更多可见K8S实战基础知识之POD
当容器运行时,根据不同的需要,可以通过不同的网络选项暴露。例如NodePort
,给容器提供了一个动态的端口。
kubectl expose deployment first-deployment --port=80 --type=NodePort
运行该命令可以找到暴露的端口
export PORT=$(kubectl get svc first-deployment -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
之后便可以访问
curl host01:$PORT
Step 4 Dashboard
Dashboard是k8s的用户界面,可以用如下命令开启
kubectl addons enable dashboard
通过/opt/kubenetes-dashboard.yaml
文件部署dashboard(可以看到yaml是一种很好的部署方式)
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
通过该命令,可以查看dashboard是否成功启动
kubectl get pods -n kubernetes-dashboard -w
从yaml文件中可以看到,端口被暴露在30000,在katacoda中,可以从如下网址查看
https://2886795278-30000-elsy04.environments.katacoda.com/