精华内容
下载资源
问答
  • 使用命令kubectl apply -f deploy.yaml构建deployment出现问题如下: 2.解决办法 编辑/etc/sysctl.conf文件,增加如下两项内容,如下图。 net.ipv4.tcp_timestamps=1 #开启对于TCP时间戳的支持。 ...

    1.错误

    使用命令kubectl apply -f deploy.yaml构建deployment出现问题如下:

    2.解决办法

    编辑/etc/sysctl.conf文件,增加如下两项内容,如下图。

    net.ipv4.tcp_timestamps=1 #开启对于TCP时间戳的支持。
    net.ipv4.tcp_tw_reuse=1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。

    执行“/sbin/sysctl -p“”让参数生效。

    /sbin/sysctl -p

    重启系统。

     

    展开全文
  • 组件 k8s 架构 k8s 是容器编排工具 管理容器集群 既然是管理 就有 管理节点 被管理节点 管理节点称为 master 被管理节点称为 nod 节点 master 组件有三个 API server API server核心功能是对核心对象(例如:Pod,...

    组件 k8s 架构

    k8s 是容器编排工具 管理容器集群 既然是管理 就有 管理节点 被管理节点

    管理节点称为 master

    被管理节点称为 nod 节点

    master 组件有三个
    API server
    API server核心功能是对核心对象(例如:Pod,Service,RC)的增删改查操作,同时也是集群内组件之间数据交换的枢纽。

    调度器 Scheduler
    为新建立的pod选择节点,分配机器

    控制器 controller
    负责执行各种控制器,有副本,节点,资源,命名空间,服务等等

    etcd数据库 	
    	是分布式键值存储数据库。用于保存集群状态数据,比如Pod、Service,RC等对象信息,可以部署到master上,也可以独立部署,自己完无所谓,生产环境会剥离ETCD数据库  搭建etcd集群 供k8s 使用
    

    nod节点

    kubelet 
    	负责管控容器,从API server接受pod的创建请求,启动和停止容器,监控pod运行状态,汇报给API server
    
    Kubernetes Proxy
    	负责为Pod创建代理服务,Proxy会从master端 API  Server获取Service的创建和修改,根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发
    
    Docker Engine  
    
    	Docker引擎,负责本机的容器创建和管理工作;  
    

    kubectl 或者dashboard

    准备yaml文件,kubectl 工具发送给API server
    apiserver 将资源内容保存到etcd

    etcd接受创建资源信息,发送创建事件 给APIserver

    控制器 controllermanager 一直在监听Api server中的事件,此时APIserver收到的创建事件,根据资源类型,yaml文件里的kind 又发送给了控制器
    控制器收到创建事件,调用de来保证要创建的副本数量,创建好之后通过APIserver 记录到etcd中 内容是 副本数 模版内容

    etcd将创建好的pod信息通过事件发送给Apiserver
    apiserver 去寻找调度器 Scheduler
    Scheduler 接收到创建pod事件, 根据 调度算法和策略 绑定到集群中 某个Node 节点上,并将绑定信息写入 etcd 中
    etcd 将更新成功的事件发送给 APIServer
    apiserver根据nod节点编号去联系节点的kubelete
    kubelete 收到 APiserver的请求,去etcd查找调度到本节点的 pod信息 ,然后装载镜像文件,并且启动容器,监控容器运行状态并汇报给Kubernetes API

    service是什么?
    Service是一组Pod的服务抽象,相当于一组Pod的LB,负责将请求分发给对应的Pod;Service会为这个LB提供一个IP,称为ClusterIP

    K8s的网络中pod的通信:
    1.pod内部容器的通信
    每个容器都有一个pause容器,这个容器运行就会挂起,但是该容器的namespace还在,pod里的其他容器通过容器映射模式,启动并接入到pause容器的namespace,之后容器直接可以使用localhost访问其他容器

    2。pod与pod的通信 有两个场景
    两个pod在一个节点上
    两个pod不在一个节点上

    两个pod在一个节点上
    同一节点的Pod,默认路由都是docker0的地址,由于它们关联在同一个docker0网桥上,地址网段相同,它们之间应当是能直接通信的。

    两个不在同一节点上
    通过CNI插件实现, flannel,calico

    为什么?
    想要 不同节点 pod与pod通信,有两个条件
    1.k8s 集群 pod的ip分配不能冲突
    2. 找到一种办法,将 POD 的 IP 和所在的 NDOE 节点 IP 关联起来, 通过这个关联让 POD 相互访问
    网络插件的作用:

    1. 对K8S集群中所有节点上的pod做IP规划,防止IP冲突。因为Pod之间通过Pod IP通信。

    2. 规划并保存 Pod IP与node IP映射关系。因为说到底node之间是通过node IP通信。

    3. Pod与Service间的通信
      Pod IP <—> cluster IP
      Service是一组Pod的服务抽象,相当于一组Pod的LB,负责将请求分发给对应的Pod;Service会为这个LB提供一个IP,称为ClusterIP。

    4. service和外部通信
      、NodePort
      NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,发送到端口的流量都被转发到对应pod。nod+port > gluster IP+port > pod IP

      节点上面都有kube-proxy组件,这个组件从master apiserver获取信息,感知service创建和变化,然后做两个事:
      1.为每个service 在集群中 每个节点上面创建一个端口,端口上面的连接会代理到相应的pod
      2.集群中每个节点编写iptables转发规则,用于clusterip + port路由到上一步定义的随机端口上面,

    展开全文
  • yaml创建 参考 client-java创建 @Data public class DeploymentDTO { private String namespace; private String deploymentName; private Integer replicas; private String metadataLabelsApp; private ...

    1 yaml创建

    部署一个应用程序

    2 client-java创建

    本质上就是用代码创建一个包含了yaml中必要的参数的对象调用接口来进行创建。

    使用AppsV1Api apiInstance = new AppsV1Api()下的createNamespacedDeployment接口

    DeploymentDTO.java

    @Data
    public class DeploymentDTO {
        private String namespace;
        private String deploymentName;
        private Integer replicas;
        private String metadataLabelsApp;
        private String image;
        private String portName;
        private Integer containerPort;
    
    }
    

    初始化工具类 K8sInit.java

    @Component
    public class K8sInit {
        public ApiClient getConnection() {
            ApiClient client = new ClientBuilder().
                    setBasePath(https://192.168.2.3:6443).		// 自己的地址
                    setVerifyingSsl(false).
                    setAuthentication(new AccessTokenAuthentication(token)).	// 自己去获取token,通过安装kuboard或dashboard可以获取
                    build();
            Configuration.setDefaultApiClient(client);
            return client;
        }
    }
    

    DeploymentController.java
    (这个代码歪歪扭扭的风格是为了好看各个层次的参数哈哈哈哈)

        /**
         * 创建一个deployment
         * @param deploymentDTO
         * @return
         */
        @PostMapping("/createNamespacedDeployment")
        public ResultUtil createNamespacedDeployment(@RequestBody DeploymentDTO deploymentDTO) {
            Gson gson = new Gson();
            AppsV1Api apiInstance = new AppsV1Api(k8sInit.getConnection());
            V1Deployment result;
    
            // labels
            Map<String,String> matchLabels = new HashMap<>();
            matchLabels.put("app", deploymentDTO.getMetadataLabelsApp());
    
            // ports
            List<V1ContainerPort> portList = new ArrayList<>();
            V1ContainerPort port = new V1ContainerPort();
            port.setName(deploymentDTO.getPortName());
            port.setContainerPort(81);
            portList.add(port);
    
            // 使用对象封装deployment
            V1Deployment body = new V1DeploymentBuilder()
                    .withApiVersion("apps/v1")
                    .withKind("Deployment")
                    .withNewMetadata()
                        .withName(deploymentDTO.getDeploymentName())
                        .withNamespace(deploymentDTO.getNamespace())
                        .endMetadata()
                    .withNewSpec()
                        .withReplicas(deploymentDTO.getReplicas())
                        .withNewSelector()
                            .withMatchLabels(matchLabels)
                            .endSelector()
                        .withNewTemplate()
                            .withNewMetadata()
                                .withLabels(matchLabels)
                                .endMetadata()
                            .withNewSpec()
                                .withContainers(
                                        new V1Container()
                                            .name(deploymentDTO.getMetadataLabelsApp())
                                            .image(deploymentDTO.getImage())
                                            .imagePullPolicy("IfNotPresent")
                                            .ports(portList)
                                )
                            .endSpec()
                        .endTemplate()
                    .endSpec()
                    .build();
            try {
                result = apiInstance.createNamespacedDeployment(
                        deploymentDTO.getNamespace(),
                        body,
                        "true",
                        null,
                        null);
                System.out.println(result);
            } catch (ApiException e) {
                return ResultUtil.error(String.valueOf(e.getCode()), e.getMessage());
            }
            return ResultUtil.success(gson.toJson(result));
        }
    

    postman请求

    地址
    POST http://localhost:8080/api/v1/deployment/createNamespacedDeployment/
    
    参数
    {
        "namespace": "default",
        "deploymentName": "create-deployment-test",
        "replicas": 1,
        "metadataLabelsApp": "nginx-test",
        "image": "nginx:1.7.9",
        "portName": "httpd",
        "containerPort": 81
    }
    

    kuboard上查看的结果
    在这里插入图片描述
    参考

    创建时必要的参数

    其他参考

    3 java-client通过yaml文件创建

    还未实践
    参考

    展开全文
  • k8s deployment 指定节点

    2021-07-30 13:22:45
    kind: Deployment metadata: name: myapp namespace: test spec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
      namespace: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
            - name: myapp
              image: rrr.**.com/eee/myapp:21
              ports:
                - containerPort: 13090
                  name: https
                - containerPort: 5005
                  name: http
          nodeName: worker4
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: myapp
      namespace: test
    spec:
      type: NodePort
      ports:
        - port: 13090
          targetPort: 13090
          nodePort: 31189
          name: https
        - port: 5005
          targetPort: 5005
          nodePort: 31188
          name: http
      selector:
        app: myapp
    
    展开全文
  • k8s初级实战03--ns & deployment & service1 基础概念2 常见用法2.1 namespace2.2 deployment2.3 service3 注意事项4 说明 1 基础概念 namespace Namespace(以下简称ns) 是对一组资源和对象的抽象集合,...
  • k8sDeployment滚动更新

    2021-10-11 21:24:38
    k8s滚动更新 deployment是一个三级结构,deployment管理replicaset,replicaset管理pod busybox-red/blue [root@k8s-master-1 autoupdate]# cat busybox-red-blue.yaml apiVersion: apps/v1 kind: Deployment ...
  • k8s的集群架构与组件 k8s也是一个Master,多个node节点 。 master组件介绍 组件名称 介绍 kube-apiserver kuber-controller-manager kuber-scheduler etcd node组件介绍
  • YAML语言似乎已经成为了事实标准的“云配置”语言,无论是容器事实标准docker...不过需要承认的是我个人最初刚接触yaml时还不是很适应(个人更适应json),在后续运维kubernetes时,每每都要去参考k8s doc中的各种k8...
  • python通过api管理k8s连接k8s集群from kubernetes import client, config# kubernetes生成时/root目录下.kube目录下的认证配置文件config.kube_config.load_kube_config(config_file="/root/.kube/config")# config....
  • 在自己的虚拟上刚经历过部署时候的坑,特别激动终于到了k8s创建正常使用的过程。 目前的Kubernetes的架构:三台服务器 10.178作为master 10.179为node1 10.181为node2 下面开始创建第一个pod,命令如下。 问题...
  • #首先准备2个不同版本的镜像,用于测试(已经在阿里云上创建好2个不同版本的nginx镜像,大家可以自己做哈,输出不同的值就可以) docker pull registry.cn-beijing.aliyuncs.com/xxxx/nginx:v1 docker pull registry....
  • error: error validating "lzb-test.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these
  • k8s核心资源分类 工作负载型资源(workload) pod:是k8s中最小的单元 ReplicaSet:调度器,通过标签控制 pod 的副本数目 Deployment:控制器,管理无状态的应用 StatefulSet:管理有状态的应用 DaemonSet:可以在每个...
  • 部分yaml脚本在修改了修改 apiVersion 选项: apps/v1...[root@k8s-master rabbitmq-cluster-on-k8s]# kubectl apply -f rabbitmq_statefulsets.yaml service/rabbitmq created configmap/rabbitmq-config created er
  • Deployment控制器支持控制更新过程中的控制,如“暂停(pause)”或“继续(resume)”更新操作。 比如有一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再...
  • 一般情况下,我们并不直接创建 Pod,而是通过 Deployment创建 Pod,由 Deployment 来负责创建、更新、维护其所管理的所有 Pods。 ReplicationSet(RS)和ReplicationController(RC)区别 这里就需要说一下...
  • k8s部署yaml时一直处于Pending状态问题

    千次阅读 2021-01-18 13:27:27
    1.在k8s环境中使用nginx-deployment.yaml部署一个nginx [root@k8s-master nginx]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx-deployment spec:...
  • K8S Deployment 部署 MySQL

    2021-04-01 15:04:22
    1、创建 PV,PVC apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv labels: app: mysql spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce nfs: server: 192.168.26.163 ...
  • 文章目录官方介绍Deployment可以帮我们做什么Deployment原理说明RS【副本数管理】更新策略【滚动更新】控制器模型环境准备Deployment使用常用代码查看deployment查看deploy详细内容创建deploy【yaml文件方式】yaml...
  • k8s中的 Deployment

    2021-01-10 01:21:16
    这篇文章重点讲解一下Deployment,在k8s中的官方介绍中,k8s的很多个特性,都是基于这个来实现的。比如我们想要弹性的服务,比如想要滚动更新我们的服务,版本回退,金丝雀发布。 并列举一下它的使用案例。 内容...
  • 只能通过service/serviceIp访问到k8s自动转发的pod 可以访问任意一个自定义的pod 易用性 只需要关心Service的信息即可 需要知道要访问的pod启动的名称、headlessService名称 PV/PVC绑定关系的稳定性(多replicas...
  • 创建pod,deployment,secret 创建1个名为 qc01ex01-eid 的 pod,在 pod 里面分别为以下每个 images 单独运行一个container: nginx+redis+busybox(提示,1个pod可以包含多个container) C:\Users\fan.hai> ...
  • K8sDeployment YAML详解

    千次阅读 2021-01-12 11:02:08
    作为最常用的 Kubernetes 对象,Deployment 经常会用来创建 ReplicaSet 和 Pod,我们往往不会直接在集群中使用 ReplicaSet 部署一个新的微服务,一方面是因为 ReplicaSet 的功能其实不够强大,一些常见的更新、扩容...
  • k8s:Deployment

    2021-03-07 14:07:30
    确保Pod数量:它会确保Kubernetes中有指定数量的Pod 在运行,如果少于指定数量的Pod,RC就会创建新的,反之这会删除多余的,保证Pod的副本数量不变。 确保Pod健康:当Pod不健康,比如运行出错了,总之无法提供正常...
  • 提示必须指定metadata.resourceVersion字段,查看k8s官网中更新service的示例如下: $ curl -X PUT -H 'Content-Type: application/yaml' --data ' apiVersion: v1 kind: Service metadata: name: deployment-...
  • 一,引入Deployment 对于kubernetes来说Pod是资源调度最小单元,kubernetes主要的功能就是管理多个Pod,Pod中可以包含一个或多个容器,而kubernetes是如可管理多个Pod的呢?对,没错,就是通过控制器,比如...
  • 安装nfs 略过了 下载外部存储卷的供应器 ... cat << END> class.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: example-nfs provisioner: example.com/nfs mountOptions: -
  • 一、知识准备● 本文详细探索deployment在滚动更新时候的行为二、环境准备组件版本OSUbuntu 18.04.1 LTSdocker18.06.0-ce三、准备镜像首先准备2个不同版本的镜像,用于测试(已经在阿里云上创建好2个不同版本的nginx...
  • K8s单机部署填坑1. 设置Docker存储路径1.13.1 或者其它版本开始,要设置daemon.json的字段为“graph”,较早版本“data-root”{"registry-mirrors":["http://hub-mirror.c.163.com"],"graph":"/data/docker"}2. ...
  • k8s-Deployment控制器

    2021-08-08 16:09:34
    文章目录Pod资源控制器一、控制器介绍二、ReplcaSet三、Deploynent3.1创建Deployment3.2 查看Deployment3.2 Deployment滚动更新3.3 回滚3.5 水平伸缩3.6 HPA3.6.1 Metrics Server3.6.2 举栗: 一、控制器介绍    ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,062
精华内容 8,824
关键字:

k8s创建deployment