//建立一个deployment资源对象。(pod控制器) [root@master ~]# kubectl run test --image=httpd --port=80 --replicas=2 //删除控制器: [root@master ~]# kubectl delete deployments. test //删除全部pod: [root@master ~]# kubectl delete deployments. --all //查看deployment资源对象 [root@master ~]# kubectl get deployments. //查看pod运行在哪一个节点之上 [root@master ~]# kubectl get pod -o wide //查看service映射出来的资源对象 [root@master ~]# kubectl get svc //查看一个资源(service)的详细信息。 [root@master ~]# kubectl describe svc test //删除资源对象: [root@master ~]#kubectl delete services test //查看deployment资源的详细信息: [root@master ~]# kubectl describe deployments. test-web //查看一个pod的详细信息: [root@master ~]# kubectl describe pod test-web-8697566669-52tq //查看replicas的详细信息 [root@master ~]# kubectl get replicasets. replicas:和controller manager都是一种控制器 //编辑一个资源对象(servie,pod,namespace均可以进行编辑): [root@master ~]# kubectl edit deployments. test-web //把输出json格式的信息导入(转为)yaml格式的文本中:(反之也是相同的) [root@master ~]# kubectl get deployments. test-web -o json > test2.yaml
方法一:命令行的方式:node
1)建立一个deployment的资源对象: [root@master ~]# kubectl run test --image=httpd --port=80 --replicas=2 kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. deployment.apps/test created //回车后会有正常提示(如上所示),提示这种deployment控制器会在未来的版本中移除,之后会有pod来代替。
[root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR test 2/2 2 2 68s test httpd run=test
2)进行扩容操做nginx
//将资源对象的副本扩容为4个: [root@master ~]# kubectl scale deployment test --replicas=4 deployment.extensions/test scaled
//查看是否扩容成功:web
[root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR test 4/4 4 4 3m40s test httpd run=test
3)进行缩容操做(跟扩容相同,减小便可)docker
//将资源对象的副本缩容为3个: [root@master ~]# kubectl scale deployment test --replicas=3 deployment.extensions/test scaled
[root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR test 3/3 3 3 7m14s test httpd run=test
方法二:也能够利用edit编辑器:json
//将该deployment的副本数量扩容为4个: [root@master ~]# kubectl edit deployments. test
//再次查看副本数量,已经扩容成功: [root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR test 4/4 4 4 11m test httpd run=test
1)搭建registry私有仓库,上传自定义镜像:
搭建私有仓库过程略,能够参考以前的博文点击连接。vim
//镜像重命名: [root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v1.0 [root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v2.0 [root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v3.0
//上传镜像: [root@master ~]# docker push 172.16.1.30:5000/nginx:v1.0 [root@master ~]# docker push 172.16.1.30:5000/nginx:v2.0 [root@master ~]# docker push 172.16.1.30:5000/nginx:v3.0
2)建立一个deployment:[root@master ~]# kubectl run mynginx --image=172.16.1.30:5000/nginx:v1.0 --replicas=4
api
//查看镜像版本信息: [root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 4/4 4 4 4m51s mynginx 172.16.1.30:5000/nginx:v1.0 run=mynginx
##若是pod没有正常运行,排错思路:架构
1,经过describe命令进行查看详细信息。 [root@master ~]# kubectl describe pod bdqn-web-7ff466c8f5-p6wcw
2,经过查看kubelet的日志信息。 [root@master ~]# cat /var/log/messages | grep kubelet
更新服务的镜像版本app
//更新镜像为nginx:v2.0 [root@master ~]# kubectl set image deployment mynginx mynginx=172.16.1.30:5000/nginx:v2.0 deployment.extensions/mynginx image updated
//查看是否更新成功: [root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 4/4 4 4 11m mynginx 172.16.1.30:5000/nginx:v2.0 run=mynginx
能够看到镜像已经更新成功。负载均衡
##############方法二:一样能够经过edit编辑器进行修改:
//将镜像版本更新为nginx:v3.0 [root@master ~]# kubectl edit deployments. mynginx
//保存退出后(与vim编辑器操做相同),查看镜像版本: [root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 4/4 4 4 16m mynginx 172.16.1.30:5000/nginx:v3.0 run=mynginx
进行回滚镜像操做
//执行回滚操做: [root@master ~]# kubectl rollout undo deployment mynginx deployment.extensions/mynginx rolled back
[root@master ~]# kubectl get deployments. -o wide #能够看到已经回滚成功 NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 4/4 4 4 18m mynginx 172.16.1.30:5000/nginx:v2.0 run=mynginx
//二次执行回滚操做: [root@master ~]# kubectl rollout undo deployment mynginx deployment.extensions/mynginx rolled back
//查看回滚后的镜像版本: [root@master ~]# kubectl get deployments. -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR mynginx 4/4 4 4 20m mynginx 172.16.1.30:5000/nginx:v3.0 run=mynginx
能够很清楚的看到,k8s默认的回滚操做跟docker swarm集群的是同样,只在先后两个版本之间进行回滚。
建立资源清单必需要知道而且记住如下几个必写的一级字段:
1,查看api全部的版本:(每一个版本都有各自的功能,固然你还能够本身添加版本) [root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
2,帮助你编写yaml文件的工具(explain):
必定要用熟悉,很是有用。
//好比建立pod,须要用到那些字段以及对应的版本和提示: [root@master ~]# kubectl explain pod
//查看帮助deployment的metadata字段是怎样写的: [root@master ~]# kubectl explain deploy.metadata #部分资源对象名能够简写,也能够补全
它会给予一些相对应的子字段,好比name名称,namespace名称空间等。
3,接下来咱们编写一个简单的部署nginx的yaml文件
提示:编写yaml文件时必定要注意格式(缩进)[root@master yaml]# vim nginx.yaml #注意,要以.yaml结尾
kind: Deployment #类型为deployment apiVersion: extensions/v1beta1 #对应的版本为v1beta1 metadata: name: nginx-deploy #定义该资源对象的名称 spec: replicas: 2 #副本数量为2 template: #定义模板 metadata: labels: #在模板中定义标签,标签的做用用于后面链接service使用 app: web-server spec: containers: - name: nginx #定义pod名称(自定义) image: nginx #指定镜像
//运行yaml文件:(有如下两种方法) [root@master yaml]# kubectl apply -f nginx.yaml #推荐使用该种方法 deployment.extensions/nginx-deploy created
或者:[root@master yaml]# kubectl create nginx.yaml
//查看pod是否运行成功: [root@master yaml]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deploy-56558c8dc7-pjdkk 1/1 Running 0 117s nginx-deploy-56558c8dc7-rxbpb 1/1 Running 0 117s
//若是须要经过yaml文件将资源对象进行删除: [root@master yaml]# kubectl delete -f nginx.yaml deployment.extensions "nginx-deploy" deleted
该种方法也是经常使用的,不用本身手动去一个一个的将pod删除。
4,建立一个service的资源对象,用于关联上述的deployment
service的做用主要用于提供一个访问服务的统一接口。k8s集群维护service和endpoint的映射关系。
//编写service的yaml文件: [root@master yaml]# vim nginx-svc.yaml
apiVersion: v1 kind: Service metadata: name: nginx-svc spec: type: NodePort #定义service的类型为nodeport selector: #标签选择器,用于关联deployment app: web-server #注意,该标签必需要deployment的标签一致,否则没法与deployment进行关联 ports: #定义端口 - protocol: TCP #协议为TCP port: 8080 #定义cluster ip对应的端口 targetPort: 80 #定义容器内的端口 nodePort: 30000 #暴露给外网的端口
//执行yaml文件:
[root@master yaml]# kubectl apply -f nginx-svc.yaml
service/nginx-svc created
//查看service的信息:
解释:
service默认为Cluster ip的类型。Cluster ip仅支持集群内部的访问,且集群内部每个节点均可以经过该ip地址相互访问。
而nodeport的类型是暴露给外网的端口,外网能够经过宿主机的ip地址+映射的端口来进行访问。
//测试访问nginx页面:
咱们k8s架构中知道,集群中的master节点默认是不参加工做的,若是须要master参加工做,该怎么作呢?
1)执行如下命令设置处于工做状态: [root@master yaml]# kubectl taint node master node-role.kubernetes.io/master- node/master untainted
2)修改上面的yaml文件,将副本数量改成3个。 [root@master yaml]# vim nginx.yaml
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: nginx-deploy spec: replicas: 3 template: metadata: labels: app: web-server spec: containers: - name: nginx image: nginx
3)从新执行yaml文件: [root@master yaml]# kubectl apply -f nginx.yaml deployment.extensions/nginx-deploy configured
4)验证pod会分配给master:(默认是不会分配给master的) [root@master yaml]# kubectl get pod -o wide
能够看到会均匀的分配给集群中每一个节点,以实现负载均衡。
[root@master yaml]# kubectl taint node master node-role.kubernetes.io/master="":NoSchedule node/master tainted
//从新运行yaml文件,查看pod是否还会分配给master [root@master yaml]# kubectl delete -f nginx.yaml deployment.extensions "nginx-deploy" deleted [root@master yaml]# kubectl apply -f nginx.yaml deployment.extensions/nginx-deploy created
注意:我这上面的pod,已是新的pod了,跟docker swarm同样,原来分配在master上的pod还会存在,只是后生成的pod会随机分配给其余节点。
咱们知道pod是经过kube-proxy组件随机分配给节点的,但若是要指定pod运行在哪一个节点上,该怎么作?
跟docker swarm同样,咱们能够经过给节点打标签的方式来实现。
1)//定义标签: [root@master yaml]# kubectl label nodes node01 test=123 #标签自定义 node/node01 labeled
//若是要删除标签: [root@master yaml]# kubectl label nodes node01 disktype-
2)//验证节点标签,并显示它们的标签状态: [root@master yaml]# kubectl get nodes --show-labels
咱们查看node01,能够查看到刚刚定义的标签。
3)//修改yaml文件: [root@master yaml]# vim nginx.yaml
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: nginx-deploy spec: replicas: 6 template: metadata: labels: app: web-server spec: containers: - name: nginx image: nginx nodeSelector: #添加节点选择器 test: '123' #指定刚刚自定义的标签,若是有数字则须要用单引或者双引号括起来
//从新执行yaml文件: [root@master yaml]# kubectl apply -f nginx.yaml deployment.extensions/nginx-deploy configured
4)//查看pod是否会运行在指定的node01上: [root@master yaml]# kubectl get pod -o wide
注意:会将原来运行在该节点上的pod进行替换。
———————— 本文至此结束,感谢阅读 ————————