云原生应用8:Kubernetes基础用法

kubernetes有两种类型的节点 master 与 node 节点,master负责调度任务,node也叫worker节点,负责具体运算,默认使用docker容器运行时
master上有4大组件:Api-Server、Scheduler、Etcd、ControllerManager
worker上有2大组件:kubelet、kube-proxy、docker

1.k8s具体工作情况如下:

k8s通过 kubectl 客户端向 api-server 发送请求,我要创建一个容器,api-server会把记录存储 etcd,同时向 scheduler 调度器发请求,scheduler 通过一系列分析得出可以在那个 node 节点有资源,能创建容器,把信息反馈给api-server,api-server记录到 etcd 中,api-server给该node 节点的 kubelet 发送请求,让 kubelet 调用本节点的容器运行时创建容器,ControllerManager 控制器会监控容器是否正常运行,并保证它正常运行

在K8s中,容器运行在Pod中,Pod中可以有多个容器,多个容器可使用localhost访问对方,一般一个Pod运行一个容器

2.k8s创建容器有两种方式
  • 1.通过 kubectl run 命令
  • 2.通过配置清单文件,然后使用 kubectl create/apply -f xxx.yaml

下面使用这两种编排容器方式,演示 nginx 如何创建,而安装好k8s集群,输入 kubectl 命令,查看帮助文档,里面有 kubectl 操作 k8s 集群的各种命令,而kubectl run 就是基于命令创建容器的一种简单方式

在这里插入图片描述

3.使用 kubectl run 命令创建 nginx pod

在命令行输入:kubectl run --help,可看到帮助文档提供的语法格式,提供了多个属性,每个属性都有英文注释
在这里插入图片描述

使用: kubectl run nginx --image=nginx --replicas=2 --port=80 命令创建名为 nginx 的 deployment 控制器,镜像为nginx,创建2个实例,绑定容器的80端口
查看deploy:kubectl get deploy
查看Pod:kubectl get pods
查看Pod的 IP:kubectl get pods -o wide
查看Pod的详细内容:kubectl inspect nginx-7c45b84548-b2m5j

可以看到 nginx 的状态为 Running 表示运行起来了,有 IP,NODE等信息,在集群内使用curl命令访问
curl 10.244.1.9 访问nginx的主页,主页内容正确返回了,这是内网IP,只能在集群内访问,无法在外网访问

在这里插入图片描述
要在集群外访问 nginx,需要使用 kubectl expose --help 命令,暴露一个 Service 服务,请求代理到容器
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
在这里插入图片描述
Type=NodePort,表示监听宿主机端口,通过kubectl get svc,可以看到 nginx service的Port,内网是80,外网是30733,也就是说,通过内外网访问nginx
内网访问:curl 10.106.143.0
外网访问:在浏览器中输入任意节点IP + 30733
在这里插入图片描述

4.使用配置清单文件创建 nginx pod

使用 kubectl run 命令创建的容器,其实最后也转换成了 yaml 格式的配置文件

  • 1.通过 kubectl get pods 查看 nginx pod
  • 2.把其中某个pod输出为 yaml 格式,kubectl get pods nginx-7c45b84548-b2m5j -o yaml
    在这里插入图片描述
    删除kubectl run 命令创建的 pod,重新通过配置清单的方式创建Pod
  • 3.该nginx pod是一个deployment控制器,删除deploy即可,kubectl get deploy,然后kubectl delete deploy nginx,删除Service,kubectl delete svc nginx
  • 4.把上面通过 kubectl get pods nginx-7c45b84548-b2m5j -o yaml 的配置内容复制到一个名为 nginx-deploy.yaml的文件中,只复制部分内容就好
    vi nginx-deploy.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
  • 5.创建Pod,kubectl apply -f nginx-deploy.yaml

  • 6.查看Pod,kubectl get pods -o wide,再通过内网 IP 访问

  • 7.暴露到外网:kubectl expose rc nginx --port=80 --target-port=80 --type=NodePort

  • 8.查看Service:kubectl get svc ,CLUSTER-IP变了,监听宿主机的端口也变成了30789
    在这里插入图片描述
    在这里插入图片描述
    通过任意Node节点的IP + 30789 访问 nginx 主页,之前 192.168.68.149,现在是 192.168.68.151

  • 9.扩容与缩容,通过 kubectl scale --help 完成自动扩容,kubectl scale --replicas=2 -f nginx-deploy.yaml
    在这里插入图片描述

本篇介绍了如何通过 k8s run命令和 清单配置文件创建Pod,k8s run 命令可以跑一些简单的测试容器,通过配置文件可以创建更定制化的容器

最重要的是如何查看帮助文档,通过 kubectl ,得到一个帮助文档列表,然后

kubectl create --help
kubectl run --help
kubectl expose --help
等等,次列表中的任意命令的语法格式都可以查看帮助文档来操作

配置清单文件的语法格式,k8s也提供了帮助文明,kubectl explain 命令

kubectl explain pods
kubectl explain pods.spec
kubectl explain pods.spec.containers 可以一层层进去

kubectl explain service
k8s怎么操作,看文档会有很大的帮助

下面汇总一些常用的kubectl操作命令

查看所有Pod列表:kubectl get pods
查看RC和Service:kubectl get rc,service
查看Pod详细内容:kubectl describe pods < pod-name >
查看Node详细内容:kubectl describe nodes < node-name >
创建或更新资源:kubectl apply -f xxx.yaml
删除资源:kubectl delete -f xxx.yaml
执行容器中date命令:kubectl exec < pod-name > date
查看容器日志:kubectl logs < pod-name >
在线编辑运行中的资源:kubectl edit deploy nginx
在Pod和本地之间复制文件:kubectl cp nginx-xxxx:/etc/fstab /tmp
资源对象设置标签:kubectl label pods < pod-name > frontend=release
查看Pod的label标签:kubectl get pods --show-labels

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章