命令行资源创建的基本操作命令
//创建一个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服务的扩容与缩容
方法一:命令行的方式:
创新互联是一家专注于成都做网站、网站设计、外贸营销网站建设与策划设计,洛宁网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:洛宁等地区。洛宁做网站价格咨询:13518219792
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=test2)进行扩容操作
//将资源对象的副本扩容为4个:
[root@master ~]# kubectl scale deployment test --replicas=4
deployment.extensions/test scaled//查看是否扩容成功:
[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=test3)进行缩容操作(跟扩容相同,减少即可)
//将资源对象的副本缩容为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编辑器:
//将该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私有仓库,上传自定义镜像:
搭建私有仓库过程略,可以参考之前的博文点击链接。
//镜像重命名:
[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
//查看镜像版本信息:
[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更新服务的镜像版本
//更新镜像为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集群的是一样,只在前后两个版本之间进行回滚。
资源的传创建方式之资源清单(yaml)
创建资源清单必须要知道并且记住以下几个必写的一级字段:
- apiVersion: api的版本
- kind:要创建的资源对象的类型
- metadata:元数据。(描述资源对象的基本信息)其中name字段是必写字段。
- spec:描述用户期望的状态。container和image字段是必写字段,container------>image.
- status: 现在pod所处的状态。(随着pod容器的运行自动生成的)
1,查看api所有的版本:(每个版本都有各自的功能,当然你还可以自己添加版本)
[root@master ~]# kubectl  api-versionsadmissionregistration.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.yamlapiVersion: 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页面:
设置master节点参加工作:
我们k8s架构中知道,集群中的master节点默认是不参加工作的,如果需要master参加工作,该怎么做呢?
1)执行以下命令设置处于工作状态:
[root@master yaml]# kubectl  taint node master node-role.kubernetes.io/master-
node/master untainted2)修改上面的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: nginx3)重新执行yaml文件:
[root@master yaml]# kubectl  apply -f  nginx.yaml 
deployment.extensions/nginx-deploy configured4)验证pod会分配给master:(默认是不会分配给master的)
[root@master yaml]# kubectl  get pod -o wide
可以看到会均匀的分配给集群中每个节点,以实现负载均衡。
恢复master节点(不参加工作)
[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运行的节点位置
我们知道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 configured4)//查看pod是否会运行在指定的node01上:
[root@master yaml]# kubectl  get pod -o wide 
注意:会将原来运行在该节点上的pod进行替换。
———————— 本文至此结束,感谢阅读 ————————
本文题目:k8s资源的创建方式之命令行&资源清单(yaml)
链接地址:http://www.scyingshan.cn/article/gpcsec.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 