用命令行的方式创建
创建Pod控制器,deployment(到k8s:1.18版本,此方式已变为创建Pod资源)
[root@master ~]# kubectl run web --image=nginx --replicas=5
查看控制器情况
[root@master ~]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
web 5/5 5 5 4m20s
查看资源详细信息
[root@master ~]# kubectl describe deployments. web
PS:查看某种资源对象,没有指定名称空间,默认是在default名称空间。可以加上-n选项,查看指定名称空间的资源
注意:直接运行创建的Deployment资源对象,是经常使用的一个控制器资源类型,除了deployment,还有rc,rs等Pod控制器,Deployment是一个高级的Pod控制器。
创建Service资源类型
[root@master ~]# kubectl expose deployment web --name=web-svc --port=80 --type=NodePort
查看Service资源信息
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-svc NodePort 10.96.10.223 <none> 80:32342/TCP 7s
查看Service资源详细信息
[root@master ~]# kubectl describe svc web-svc
PS: 如果想要外网能够访问服务,可以暴露deployment资源,得到service资源,但svc资源的类型必须为NodePort(大小写必须严格按照要求)
服务的扩容与缩容
扩容
[root@master ~]# kubectl scale deployment web --replicas=8
[root@master ~]# kubectl get deployments.
NAME READY UP-TO-DATE AVAILABLE AGE
web 8/8 8 8 13m
缩容
[root@master ~]# kubectl edit deployments. web //修改spec字段下面的replicas
[root@master ~]# kubectl get deployments.
NAME READY UP-TO-DATE AVAILABLE AGE
web 3/3 3 3 19m
服务的升级与回滚
升级
[root@master ~]# kubectl set image deployment web web=nginx:1.15
[root@master ~]# kubectl edit deployments. web
回滚
[root@master ~]# kubectl rollout undo deployment web
[root@master ~]# kubectl edit deployments. web
常用命令集合
kubectl run #创建一个deployment或job来管理创建的容器
kubectl get #显示一个或多个资源,可以使用标签过滤,默认查看当前名称空间的资源
kubectl expose #将一个资源暴露为一个新的kubernetes的service资源,资源包括pod (po), service (svc), replicationcontroller(rc),deployment(deploy), replicaset (rs
)kubectl describe #显示特定资源或资源组的详细信息
kubectl scale #可以对Deployment, ReplicaSet, ReplicationController, 或者StatefulSet设置新的值,可以指定一个或多个先决条件
kubectl set #更改现有的应用程序资源kubectl rollout #资源回滚管理
配置清单(yml、yaml)
常见Yaml文件写法:以及字段的作用
apiVersion: api版本信息
kind:资源对象的类别
metadata: 元数据名称字段必写。
spec:用户期望的状态。
status:资源现在处于什么样的状态。
可以使用kubectl explain 命令查看我们要写的资源对象的yaml文件怎么写。比如查看deployment资源的话就可以写成:
[root@master ~]# kubectl explain deploy
Deployment
vim deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: web2
spec:
replicas: 4
template:
metadata:
labels:
app: web2
spec:
containers:
- name: web2
image: nginx
Service
vim service.yaml
kind: Service
apiVersion: v1
metadata:
name: web-svc
spec:
selector:
app: web2 //这里一定要和deployment的labels下的一样
ports:
- protocol: TCP
port: 80
targetPort: 80
使用相同的标签和标签选择器内容,使两个资源对象相互关联。
PS: 创建的Service资源对象,默认的type为ClusterIP,意味着集群内任意节点都可访问。它的作用是为后端真正提供服务的Pod提供一个统一的访问接口。如果想要外网能否访问服务,应该把type改为NodePort.
kind: Service
apiVersion: v1
metadata:
name: web-svc
spec:
type: NodePort // 指定类型,让外网访问
selector:
app: web2 // 这里一定要和deployment的labels下的一样
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30033 // 指定集群映射端口,范围是30000-32767
使用kubectl apply 命令运行yaml文件
[root@master ~]# kubectl apply -f deployment.yaml
[root@master ~]# kubectl apply -f service.yaml