① . 1 查看当前集群状态信息
kubectl version
kubectl cluster-info
kubectl get nodes -o wide
① . 2 尝试创建第一个pod
#创建一个nginx pod 端口为80, 副本为2个
kubectl run nginx --image=nginx --port=80 replicas=2
#查看pod状态,并访问测试
kubectl get pods -o wide
curl 10.244.2.2
测试结果可以看到2个NGINX pod 已经被自动调度到两个node中了,并且访问后显示了熟悉的Welcome页面为测试成功~~
① . 3 测试删除后自动创建,自动补足用户设置的期望pod数。
kubectl delete pod nginx-5578584966-4frgt
kubectl get pods
可以看到名为“-4frgt”的pod已被删除,瞬间一个叫“-plvp6”的pod就被创建好了,因为当初设置的期望副本数为2,所以此时他会立即将被删除的pod补全。这种情况应用于在某个pod出现故障bug的时候,我们可以直接delete掉那个pod,k8s会为我们立即补充创建,并调度到合适的node中工作。
② . 创建第一个service服务,为pod提供一个固定端口访问
工作场景:如果客户端需要访问由多个pod提供的服务的时候,我们不能一个一个IP的访问吧,要有一个固定端口为我们调度的话,那才算智能😀~,所以有了service出现,通过service架构图了解一个他的工作原理,一目了然。
② . 1 开始为NGINX pod 创建第一个service吧
kubectl expose deploy nginx --name=nginx --port=80 --target-port=80 --protocol=TCP
## deploy 指明要为deployment控制器类型的资源创建service
## nginx 是资源名
## --name=nginx 是service的名称
## --port=80 是pod需要被监听的端口号
## --target-port=80 是指映射到service上是哪个端口号,这里一定要注意不要冲突,如果80被占用可以改成其他端口号 如30080
## --protocol=TCP 指明协议为TCP 不指默认也是TCP ,这里要注意大小写
创建好后用命令可以查看service的状态(svc为service的缩写),其中第一个是kubernetes自动创建的dns服务,名为kubernetes
,呆会儿到容器内也可以看到这个dns服务。
② . 2 现在在集群内部创建一个客户端,用服务名访问测试
kubectl run client --image=busybox --replicas=1 -it --restart=Never
# 用busybox镜像做一个客户端
# -it 表示进入到容器中
# --restart=Never 表示删除后不再自动建立
下图可以看到,被设置在内部的client的dns默认被设置成了kubernetes的dns,所以我们可以用IP访问,也可以直接用service的名字访问。
到这里,我们已经对service的面貌有了一个初步的了解,后续更新的文章会详细讲解service。
② . 3 利用客户端访问看一看客户端的请求是如何调度到不同的pod上的
3.1 首先创建一个带有html页面的app这里已经写好了可以直接用
kubectl run app --image=ikubernetes/myapp:v1 --replicas=3
kubectl expose deploy app --name=app-svc --port=80 --target-port=80 --protocol=TCP
3.2 接着创建一个客户端busybox,连接到容器中,写一个循环来探测我们的请求发往了哪个pod之上😋
kubectl run client --image=busybox --replicas=1 --restart=Never -it
while true;do wget -O - -q app-svc/hostname.html ;sleep 1 ;done
图中已经成功的显示了,我们的请求已经被随机发往了满足条件的pod,试验成功~ 那么来自同一客户端的请求能不能始终只由一个pod提供服务呢?答案是肯定的,后面详细讲service的时候再给大家介绍~😝