学习连接https://kuboard.cn/learning/k8s-basics/deploy-app.html#%E5%AE%9E%E6%88%98-%E9%83%A8%E7%BD%B2-nginx-deployment
本文使用的是单master
的K8S
,搭建方法略。
kuboard截图
按教程创建一个nginx
应用
创建nginx-deployment.yaml
文件
内容如下:
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 1 #使用该Deployment创建一个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: nginx:1.7.9 #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
完成后应用以及查看部署结果
#部署
op@p40:~$ kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
#查看 Deployment
op@p40:~$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/1 1 0 10s
#查看 Pod
op@p40:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-59bd9cff8-j2tsr 1/1 Running 0 17s
op@p40:~$
附其他参数
# 查看所有名称空间的 Deployment
kubectl get deployments -A
kubectl get deployments --all-namespaces
# 查看 kube-system 名称空间的 Deployment
kubectl get deployments -n kube-system
#查看名称为XXXXXX的Pod的信息
kubectl describe pod XXXXXX
#查看名称为XXX的Deployment的信息
kubectl describe deployment XXX
#查看名称为XXXXXXX的Pod内的容器打印的日志(和命令docker logs 类似)
kubectl logs -f XXXXXXX
# 在名称为XXXXX的Pod中运行bash(和命令docker exec 类似)
kubectl exec -it XXXXX /bin/bash
发布一个应用
创建文件nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service #Service 的名称
labels: #Service 自己的标签
app: nginx #为该 Service 设置 key 为 app,value 为 nginx 的标签
spec: #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
selector: #标签选择器
app: nginx #选择包含标签 app:nginx 的 Pod
ports:
- name: nginx-port #端口的名字
protocol: TCP #协议类型 TCP/UDP
port: 80 #集群内的其他容器组可通过 80 端口访问 Service
nodePort: 32600 #通过任意节点的 32600 端口访问 Service
targetPort: 80 #将请求转发到匹配 Pod 的 80 端口
type: NodePort #Serive的类型,ClusterIP/NodePort/LoaderBalancer
发布以及查看
op@p40:~$ kubectl apply -f nginx-service.yaml
service/nginx-service created
op@p40:~$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.60.0.1 <none> 443/TCP 130m <none>
nginx-service NodePort 10.60.38.33 <none> 80:32600/TCP 8s app=nginx
op@p40:~$
通过访问<任意node的 IP>:32600
查看
发布的nginx服务
伸缩应用和滚动更新均可操作
yaml
文件然后发布来实现。通过watch
命令来查看过程和结果。