准备工作
注意docker需要使用非root账户运行,minikube也需要非root账户。
清理环境
之前安装过的话,需要清理下环境,新安装的不需要执行。
1 | [wangyt@pseudo-cluster ~]$ minikube stop |
创建一个minikube虚拟机
1 | [wangyt@pseudo-cluster ~]$ minikube start |
查看集群信息
1 | [wangyt@pseudo-cluster ~]$ kubectl cluster-info |
开启dashboard
1 | [wangyt@pseudo-cluster ~]$ minikube dashboard --port=8899 --url=true |
外面访问不到,可以开proxy:使用 HTTP 代理访问 Kubernetes API
1 | 启动 Kubernetes API 服务器的代理: |
访问:
查看Pod
1 | [wangyt@pseudo-cluster ~]$ kubectl get po -A |
Pod(容器组)
我们以tomcat为例,使用k8s来部署服务。
Pod是Kubernetes中的容器组,一个Pod可以包含一个或多个容器(Docker)。我们可以用一个YAML文件来描述如何建立一个Pod。
tomcat-pod.yaml
:
1 | apiVersion: v1 |
使用kubectl
部署Pod:
1 | [wangyt@pseudo-cluster tmp]$ kubectl create -f tomcat-pod.yaml |
查看Pod:
1 | [wangyt@pseudo-cluster tmp]$ kubectl get pods -A |
查看Pod详情:
1 | [wangyt@pseudo-cluster ~]$ kubectl describe pod/tomcat |
进入Pod容器:
1 | [wangyt@pseudo-cluster ~]$ kubectl exec -it tomcat -- /bin/bash |
Replica Set(副本集)
Replica Set控制Pod副本的运行数量。
tomcat-rs.yaml
:
1 | apiVersion: apps/v1 |
部署ReplicaSet:
1 | [wangyt@pseudo-cluster basic]$ kubectl create -f tomcat-rs.yaml |
查看rs:
1 | [wangyt@pseudo-cluster basic]$ kubectl get rs |
副本集详情:
1 | [wangyt@pseudo-cluster basic]$ kubectl describe replicasets/tomcat-rs |
查看Pods:
1 | [wangyt@pseudo-cluster basic]$ kubectl get pods |
Service(服务)
Service将一组Pod组织在一起,然后可以通过Service名来访问,还可以实现Pod的负载均衡。
tomcat-service.yaml:
1 | apiVersion: v1 |
Service有以下三种类型:
NodePort
:通过Node的静态端口暴露服务。LoadBalancer
:使用云平台提供商的Load Balancer(例如阿里云会提供一个公网IP地址)。ClusterIP
:只能在k8s内部可以访问的服务。
部署Service:
1 | [wangyt@pseudo-cluster basic]$ kubectl create -f tomcat-service.yaml |
查看Service:
1 | [wangyt@pseudo-cluster basic]$ kubectl get services |
查看Service详情:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[wangyt@pseudo-cluster basic]$ kubectl describe services/tomcat-service
Name: tomcat-service
Namespace: default
Labels: app=mytomcat
Annotations: <none>
Selector: app=mytomcat
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.111.23.38
IPs: 10.111.23.38
Port: <unset> 30000/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30000/TCP
Endpoints: 172.17.0.5:8080,172.17.0.6:8080,172.17.0.7:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
[wangyt@pseudo-cluster basic]$
访问服务:
这里使用NodePort访问服务,可以通过下面的命令获取Node的IP地址:
minikube ip
1 | [wangyt@pseudo-cluster basic]$ minikube ip |
TODO 将tomcat设置为clusterIp模式,测试k8s proxy 方式访问:
http://192.168.101.120:8899/api/v1/proxy/namespaces/
http://192.168.101.120:8899/api/v1/proxy/namespaces/default/services/skywalking-ui:http/
Deployment(部署)
Deployment可以管理ReplicaSet和Pod的部署,具备更新和回滚的能力。
tomcat-deployment.yaml
:
1 | apiVersion: apps/v1 |
部署Deployment
1 | [wangyt@pseudo-cluster basic]$ kubectl create -f tomcat-deployment.yaml |
查看Deployment:
1 | kubectl get deployments |
查看Deployment详情:
1 | [wangyt@pseudo-cluster basic]$ kubectl get deployments |
更新部署,升级到tomcat9版本。
1 | [wangyt@pseudo-cluster basic]$ kubectl set image deployment/tomcat-deployment tomcat=tomcat:9 |
查看版本是否更新:
可以看到版本变成了Tomcat/9.0.62
1 | [wangyt@pseudo-cluster basic]$ curl `minikube ip`:30000 |
更新Pod数量:
1 | [wangyt@pseudo-cluster tmp]$ kubectl scale deployment tomcat-deployment --replicas 2 |
回滚:
查看历史版本:
1 | [wangyt@pseudo-cluster tmp]$ kubectl rollout history deployments/tomcat-deployment |
1 | [wangyt@pseudo-cluster tmp]$ kubectl get deployment |
可以看到版本已变更为:Tomcat/8.5.78
Ingress(访问权)
访问权用来定义外部访问集群内部服务的规则,类似于Gateway。
开启nginx ingress controller,网络失败多试几次,不行开启代理。也可以使用minikube ssh
登录,再使用docker pull
手动拉取镜像。
1 | [wangyt@pseudo-cluster spring-boot-book-source-code]$ minikube addons enable ingress |
ingress.yaml
:
1 | apiVersion: networking.k8s.io/v1beta1 |
数据存储
示例说明
示例中tomcat貌似无论怎么访问都是404,原因如下:
1 | root@tomcat-rs-4rpwj:/usr/local/tomcat# ls -lh |