• k8s学习


    1、k8s简单使用

    # 创建一个deploy
    kubectl create deployment  nginx --image=nginx
    # 暴漏pod,也就是创建一个类型为NodePort的service
    kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
    # 查看service
    kubectl get svc
    

    创建好以后就会有一个nginx pod service和deployment
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    因为我现在是用的minikube,也就是单机版k8s,minikube作为一个特殊的k8s节点node,只能用minikube的ip来访问,这个ip并不是linux的ip:minikube ip
    在这里插入图片描述
    访问nginx:curl 192.168.49.2:30229,30229端口即service暴露出来的可供外部访问的接口
    在这里插入图片描述
    2、container pod service deployment的关系
    (1) container即容器,pod是k8s中运行的最小单元,一个pod中可以有一个或多个容器,通常一个pod中只有一个容器
    (2) service是管理pod的,一个pod都有一个ip地址,当一个pod被销毁再创建时他的ip就会变,此时之前的ip就不能访问了,而service管理同一类pod,且service也有一个ip,即使service管理的pod被删掉重新创建了新的pod,通过service的ip仍然可以访问
    (3) deployment是pod的控制器,通过deployment可以灵活的创建pod,比如创建几个副本等等,而且当pod被删除,deployment会自动根据副本数量重新创建pod从而保证服务的高可用

    3、yaml创建服务
    先查看刚才创建的pod的yaml:kubectl get pod nginx-85b98978db-n29vn -o yaml
    在这里插入图片描述
    我们创建新的pod也可以通过kubectl apply 加yaml格式文件来创建。
    在创建之前先说一个概念 namespace(ns),即命名空间。通过命名空间可以将pod隔离,比如分别在dev和test两个命名空间各创建一个nginx给不同的开发小组使用,互补干扰,用来部署不同的前端项目或者反向代理等等。
    创建命名空间:kubectl create ns dev
    在这里插入图片描述
    通过yaml文件[dev-ns.yaml]创建命名空间:

    apiVersion: v1
    kind: Namespace #类型
    metadata:
      name: dev #名称
    
    kubectl apply -f dev-ns.yaml
    

    通过yaml文件[nginx-pod.yaml] 创建nginx pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: dev
      labels: #给pod添加标签,这里的标签可以随便打,也就是说nginx和tomcat也可以是同样的标签,虽然实际中打错了肯定会出问题
        version: '3.0'
        env: dev
        app: nginx-pod
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - name: nginx-port
          containerPort: 80 # 容器/pod端口
          protocol: TCP
          hostPort: 8888  # 暴露到宿主机即node的端口 
    

    由于上面暴露了8888端口到node节点,所以可以直接访问。容器端口不能写错,写错了就访问不了了
    在这里插入图片描述
    通过yaml文件[nginx-service-nodeport.yaml] 创建类型为NodePort nginx service:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service-nodeport
      namespace: dev
    spec:
      selector: #标签选择器,这里通过标签来匹配pod
        app: nginx-pod
      type: NodePort
      ports:
      - port: 80  # Service端口
        targetPort: 80 # pod端口
    

    里面需要注意的是标签选择器,这个必须能够匹配pod的标签,如果不一样也能创建,但是访问不到pod。port可以随便写,targetPort必须和pod的端口一致,否则访问不了。

    可以看到创建了一个service,有个端口映射,通过这个31415端口可以访问nginx,也就是说NodePort类型的service会暴露一个宿主机的端口,通过这个端口
    在这里插入图片描述
    通过yaml文件[nginx-service-nodeport.yaml] 创建类型 nginx deploy:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx #deploy名称
      namespace: dev #命名空间
    spec:
      replicas: 3 # 副本数量
      selector: # 选择器,通过它指定该控制器管理哪些pod
        matchLabels:
          app: nginx-pod #标签可随便写就是key-value
      template:
        metadata:
          labels:
            app: nginx-pod #与上面标签匹配
        spec:
          containers:
          - name: nginx #容器名称
            image: nginx:1.17.1 #容器镜像
    

    在这里插入图片描述
    这里创建了三个标签为nginx-podpod副本,所以在实际使用中一般不会直接创建pod而通过deployment来管理pod。

  • 相关阅读:
    双链表的插入和删除
    Java项目:SSM红酒朔源管理系统
    南卡和UHB这两款电容笔哪一款更值得入手?高性价比平替电容笔对比
    新零售SaaS架构:多租户系统架构设计
    Linux安装系列:构建Minio服务器
    Ajax概述,封装以及联合模板引擎进行数据交互
    时空智友企业流程化管控系统 sessionid泄露漏洞 复现
    SpringBoot项目打包成jar后,使用ClassPathResource获取classpath(resource)下文件失败
    排查线上问题的9种方式
    scanf、printf使用详解
  • 原文地址:https://blog.csdn.net/weixin_42196915/article/details/127092802