k8s学习笔记-03-Mater节点二进制部署

[TOC] K8S Mater节点部署 1、部署Kubernetes API服务部署 apiserver提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等。 只有API Server才能直接操作etcd; 其他模块通过API Server查询或修改数据 提供其他模块之间的数据交互和通信枢纽 (1)准备软件包 [root@linux-node1 ~]# cd /usr/local/src/kubernetes [root@linux-node1 kubernetes]# cp server/bin/kube-apiserver /opt/kubernetes/bin/ [root@linux-node1 kubernetes]# cp server/bin/kube-controller-manager /opt/kubernetes/bin/ [root@linux-node1 kubernetes]# cp server/bin/kube-scheduler /opt/kubernetes/bin/只需要在linux-node1上拷贝 (2)创建生成CSR的 JSON 配置文件 [root@linux-node1 ~]# cd /usr/local/src/ssl[root@linux-node1 ssl]# vim kubernetes-csr.json { "CN": "kubernetes", "hosts": [ "127.0.0.1", "192.168.56.110", #Master的ip地址 "10.1.0.1", "kubernetes", "kubernetes.default", "kubernetes.default.svc", "kubernetes.default.svc.cluster", "kubernetes.default.svc.cluster.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", "OU": "System" } ] } (3)生成 kubernetes 证书和私钥 [root@linux-node1 ssl]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \ -ca-key=/opt/kubernetes/ssl/ca-key.pem \ -config=/opt/kubernetes/ssl/ca-config.json \ -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes [root@linux-node1 ssl]# cp kubernetes*.pem /opt/kubernetes/ssl/ [root@linux-node1 ssl]# scp kubernetes*.pem 192.168.56.120:/opt/kubernetes/ssl/ [root@linux-node1 ssl]# scp kubernetes*.pem 192.168.56.130:/opt/kubernetes/ssl/ (4) 创建 kube-apiserver 使用的客户端 token 文件 [root@linux-node1 ~]# head -c 16 /dev/urandom | od -An -t x | tr -d ' ' ad6d5bb607a186796d8861557df0d17f [root@linux-node1 ~]# vim /opt/kubernetes/ssl/bootstrap-token.csv ad6d5bb607a186796d8861557df0d17f,kubelet-bootstrap,10001,"system:kubelet-bootstrap" (5) 创建基础用户名/密码认证配置 [root@linux-node1 ~]# vim /opt/kubernetes/ssl/basic-auth.csv admin,admin,1 readonly,readonly,2 (6) 部署Kubernetes API Server [root@linux-node1 ~]# vim /usr/lib/systemd/system/kube-apiserver.service [Unit] Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] ExecStart=/opt/kubernetes/bin/kube-apiserver \ --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,NodeRestriction \ --bind-address=192.168.56.110 \ --insecure-bind-address=127.0.0.1 \ --authorization-mode=Node,RBAC \ --runtime-config=rbac.authorization.k8s.io/v1 \ --kubelet-https=true \ --anonymous-auth=false \ --basic-auth-file=/opt/kubernetes/ssl/basic-auth.csv \ --enable-bootstrap-token-auth \ --token-auth-file=/opt/kubernetes/ssl/bootstrap-token.csv \ --service-cluster-ip-range=10.1.0.0/16 \ --service-node-port-range=20000-40000 \ --tls-cert-file=/opt/kubernetes/ssl/kubernetes.pem \ --tls-private-key-file=/opt/kubernetes/ssl/kubernetes-key.pem \ --client-ca-file=/opt/kubernetes/ssl/ca.pem \ --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \ --etcd-cafile=/opt/kubernetes/ssl/ca.pem \ --etcd-certfile=/opt/kubernetes/ssl/kubernetes.pem \ --etcd-keyfile=/opt/kubernetes/ssl/kubernetes-key.pem \ --etcd-servers=https://192.168.56.110:2379,https://192.168.56.120:2379,https://192.168.56.130:2379 \ --enable-swagger-ui=true \ --allow-privileged=true \ --audit-log-maxage=30 \ --audit-log-maxbackup=3 \ --audit-log-maxsize=100 \ --audit-log-path=/opt/kubernetes/log/api-audit.log \ --event-ttl=1h \ --v=2 \ --logtostderr=false \ --log-dir=/opt/kubernetes/log Restart=on-failure RestartSec=5 Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target (7) 启动API Server服务 [root@linux-node1 ~]# systemctl daemon-reload [root@linux-node1 ~]# systemctl enable kube-apiserver [root@linux-node1 ~]# systemctl start kube-apiserver [root@linux-node1 ~]# systemctl status kube-apiserver [root@linux-node1 ssl]# netstat -tulnp |grep kube-apiserver tcp 0 0 192.168.56.110:6443 0.0.0.0:* LISTEN 5052/kube-apiserver tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 5052/kube-apiserver 从监听端口可以看到api-server监听在6443端口,同时也监听了本地的8080端口,是提供kube-schduler和kube-controller使用。 ...

August 13, 2018

mask rcnn 数据基础介绍

[TOC] 概念理解 Mask R-CNN (Regional Convolutional Neural Network: 区域卷积神经网络) 图像分类 (Classification): 图片中有气球。 语义分割 (Semantic Segmentation): 这些是图片中组成所有气球的像素。 目标检测 (Object Detection): 这里是图片中7个气球的位置。我们需要识别被遮挡的物体。 实例分割 (Instance Segmentation): 这是是图片中7个气球的位置,包括组成每一个气球的像素。 mAP: 均值平均精度(Mean Average Precision) Backbone: 骨干网络 backbone feature map : 骨干特征图 Feature Pyramid Network (FPN): 特征金字塔网络 Mask RCNN 的实现采用的是 ResNet101 + FPN 作为骨干网络 Region Proposal Network (RPN): 区域提议网络 Anchor: 锚点, RPN 通过扫描骨干特征图(backbone feature map ) 得到锚点的. SSD 中称为先验框Prior boxes Non-max Suppression : 非最大抑制, 在 RPN 预测过程中,我们会选择最可能包含物体的锚点,然后去修正它们的位置以及尺寸。如果有些锚点重叠得太多,我们会保留前景得分最高的一个,而其他的锚点就丢弃掉(这种方式成为非最大抑制 Non-max Suppression )。 ...

August 13, 2018

mask rcnn 数据预处理解读

[TOC] import os import sys import json import skimage.draw import skimage.io import skimage.color from imgaug import augmenters as iaa import numpy as np import random import matplotlib.pyplot as plt # plt.switch_backend('agg') # Root directory of the project ROOT_DIR = os.path.abspath("../../") sys.path.append(ROOT_DIR) # Import Mask RCNN from mrcnn import visualize from mrcnn.config import Config from mrcnn import model as modellib, utils from mrcnn.model import log from samples.cells import run_via_json COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5") DEFAULT_LOGS_DIR = os.path.join(ROOT_DIR, "logs") class_names = ['BG', 'cells1', 'cells2'] train_class_name = ['cells1', 'cells2'] show_class_name = ['cells2'] train_config = run_via_json.TrainConfig() config = train_config dataset = run_via_json.CellDataset() dataset.load_data(train_config.dataset_dir, train_config.train_dir_name, class_names, annotation=train_config.train_annotation_json) dataset.prepare()

August 13, 2018

k8s学习笔记-02-ETCD集群二进制部署

[TOC] ETCD集群部署 所有持久化的状态信息以KV的形式存储在ETCD中。类似zookeeper,提供分布式协调服务。之所以说kubenetes各个组件是无状态的,就是因为其中把数据都存放在ETCD中。由于ETCD支持集群,这里在三台主机上都部署上ETCD。 (1)准备etcd软件包 wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz [root@linux-node1 src]# tar zxf etcd-v3.2.18-linux-amd64.tar.gz #解压etcd [root@linux-node1 src]# cd etcd-v3.2.18-linux-amd64 #有2个文件,etcdctl是操作etcd的命令 [root@linux-node1 etcd-v3.2.18-linux-amd64]# cp etcd etcdctl /opt/kubernetes/bin/ [root@linux-node1 etcd-v3.2.18-linux-amd64]# scp etcd etcdctl 192.168.56.120:/opt/kubernetes/bin/ [root@linux-node1 etcd-v3.2.18-linux-amd64]# scp etcd etcdctl 192.168.56.130:/opt/kubernetes/bin/ (2)创建 etcd 证书签名请求 [root@linux-node1 ~]# cd /usr/local/src/ssl [root@linux-node1 ssl]# vim etcd-csr.json { "CN": "etcd", "hosts": [ #此处的ip是etcd集群中各个节点的ip地址 "127.0.0.1", "192.168.56.110", "192.168.56.120", "192.168.56.130" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", "OU": "System" } ] } (3)生成 etcd 证书和私钥 [root@linux-node1 ~]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \ -ca-key=/opt/kubernetes/ssl/ca-key.pem \ -config=/opt/kubernetes/ssl/ca-config.json \ -profile=kubernetes etcd-csr.json | cfssljson -bare etcd 会生成以下证书文件 [root@linux-node1 ~]# ls -l etcd* -rw-r--r-- 1 root root 1045 Mar 5 11:27 etcd.csr -rw-r--r-- 1 root root 257 Mar 5 11:25 etcd-csr.json -rw------- 1 root root 1679 Mar 5 11:27 etcd-key.pem -rw-r--r-- 1 root root 1419 Mar 5 11:27 etcd.pem (4)将证书拷贝到/opt/kubernetes/ssl目录下 [root@linux-node1 ~]# cp etcd*.pem /opt/kubernetes/ssl [root@linux-node1 ~]# scp etcd*.pem 192.168.56.120:/opt/kubernetes/ssl [root@linux-node1 ~]# scp etcd*.pem 192.168.56.130:/opt/kubernetes/ssl (5)配置ETCD配置文件 2379端口用于外部通信,2380用于内部通信 ...

August 12, 2018

k8s学习笔记-01-概念和创建证书

[TOC] 1、Kubernetes的重要概念 Cluster Cluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。 Master Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master 运行 Linux 操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个 Master。 Node Node 的职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 运行在 Linux 操作系统,可以是物理机或者是虚拟机。 Pod Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。 Kubernetes 引入 Pod 主要基于下面两个目的: 可管理性。 有些容器天生就是需要紧密联系,一起工作。Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。Kubernetes 以 Pod 为最小单位进行调度、扩展、共享资源、管理生命周期。 通信和资源共享。 Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们可以直接用 localhost 通信。同样的,这些容器可以共享存储,当 Kubernetes 挂载 volume 到 Pod,本质上是将 volume 挂载到 Pod 中的每一个容器。 Pods 有两种使用方式: ...

August 11, 2018

tensorRT安装

[TOC] tensorRT简介 深度学习的发展带动了一批深度学习框架,caffe、tensorflow、pytorch等,对于计算量庞大的CNN,效率一直是大家所关注的,接触过深度网络压缩的同学应该知道网络压缩最关键的两个思路,剪枝和量化。 TensorRT就是量化,将FP32位权值数据优化为 FP16 或者 INT8,而推理精度不发生明显的降低。 关于TensorRT首先要清楚以下几点: TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练; 目前TensorRT4已经支持Caffe、Caffe2、TensorFlow、MxNet、Pytorch等主流深度学习库; TensorRT底层针对NVIDIA显卡做了多方面的优化,不仅仅是量化,可以和 CUDA CODEC SDK 结合使用,也就是另一个开发包DeepStream; TensorRT独立于深度学习框架,通过解析框架文件来实现,不需要额外安装DL库; 参考示意图: tensorRT安装 1、安装tensorRT之前准备

July 15, 2018

Deep Learning Video Classification and Captioning

[TOC] 基本术语 视频分类(Video Classification):将基于视频的语义内容如人类行为和复杂事件等,将视频片段自动分类至单个或多个类别,视频分类的研究内容主要包括多标签的通用视频分类和人类行为识别等。 视频描述生成(Video Captioning):试图基于视频分类的标签,形成完整的自然语句,为视频生成包含最多动态信息的描述说明。 词袋模型(Bag of Words) 3D CNN Two-stream CNN TSN模型 LSTM GRU-RNN 研究方法 一、 传统视频分类方法研究 在深度学习方法广泛应用之前,大多数的视频分类方法采用基于人工设计的特征和典型的机器学习方法研究行为识别和事件检测。 传统的视频分类研究专注于采用对局部时空区域的运动信息和表观(Appearance)信息编码的方式获取视频描述符,然后利用词袋模型(Bag of Words)等方式生成视频编码,最后利用视频编码来训练分类器(如SVM),区分视频类别。视频的描述符依赖人工设计的特征,如使用运动信息获取局部时空特征的梯度直方图(Histogram of Oriented Gradients,HOG),使用不同类型的轨迹的光流直方图(Histogram of Optical Flow, HOF)和运动边界直方图(Motion Boundary Histogram,MBH)。通过词袋模型或Fisher向量方法,这些特征可以生成视频编码。 当前,基于轨迹的方法(尤其是DT和IDT)是最高水平的人工设计特征算法的基础[2]。许多研究者正在尝试改进IDT,如通过增加字典的大小和融合多种编码方法,通过开发子采样方法生成DT特征的字典,在许多人体行为数据集上取得了不错的性能。 然而,随着深度神经网络的兴起,特别是CNN、LSTM、GRU等在视频分类中的成功应用,其分类性能逐渐超越了基于DT和IDT的传统方法,使得这些传统方法逐渐淡出了人们的视野。 二、 深度网络方法研究 **深度网络为解决大规模视频分类问题提供了新的思路和方法。**近年来得益于深度学习研究的巨大进展,特别是卷积神经网络(Convolutional Neural Networks, CNN)作为一种理解图像内容的有效模型,在图像识别、分割、检测和检索等方面取得了最高水平的研究成果。卷积神经网络CNN在静态图像识别问题中取得了空前的成功,其中包括MNIST、CIFAR和ImageNet大规模视觉识别挑战问题。CNN采用卷积与池化操作,可以自动学习图像中包含的复杂特征,在视觉对象识别任务中表现出很好的性能。基于CNN这些研究成果,国内外开始研究将CNN等深度网络应用到视频和行为分类任务中。 与图像识别相比,视频分类任务中视频比静态图像可以提供更多的信息,包括随时间演化的复杂运动信息等。视频(即使是短视频)中包含成百上千帧图像,但并不是所有图像都有用,处理这些帧图像需要大量的计算。最简单的方法是将这些视频帧视为一张张静态图像,应用CNN识别每一帧,然后对预测结果进行平均处理来作为该视频的最终结果。然而,这个方法使用了不完整的视频信息,因此使得分类器可能容易发生混乱。 (1) 监督学习方法 i. 基于图像的视频分类:将视频片段视为视频帧的集合,每个视频帧的特征通过ImageNet数据集上预先训练的最高水平的深度模型(如AlexNet,VGGNet,GoogLeNet,ResNet)进行获取*。最终,帧层特征汇聚为视频层特征,作为标准分类器(如SVM)识别的输入。* ii. 端到端的CNN网络:关注于利用CNN模型学习视频隐含的时空模式,如3D CNN,Two-stream CNN,TSN模型等。 iii. 双流(Two-stream)法中的时间CNN只能获取很短时间窗口内的运动信息,难以处理长时间多种行为组成的复杂事件和行为。因此,引入RNN来建模长期时间动态过程,常用的模型有LSTM,GRU-RNN等。LSTM避免了梯度消失的问题,在许多图像和视频摘要、语音分析任务中非常有效。 iv. 视频中包含了很多帧,处理所有的视频帧计算代价很大,也会降低识别那些与类别相关的视频帧的性能。因此,引入视觉注意力机制来识别那些与目标语义直接相关的最有判别力的时空特征 (2) 非监督学习方法 采用非监督学习的方法,整合空间和时间上下文信息,是发现和描述视频结构的一种很有前途的方法。 datasets 近年来为推动视频分类的研究,也陆续发布了相关的视频数据集。小型标注良好的数据集如KTH,Hollywood2,Weizmann;中型的数据集如UCF101,Thumos’14和HMDB51,这些数据集超过了50类行为类别;大型数据集如Sports-1M,YFCC-100M,FCVID数据集,ActivityNet数据集,YouTube-8M等。 ![Deep Learning Video Classification and Captioning](Deep Learning Video Classification and Captioning.jpg) ...

July 7, 2018

机器学习常用术语

[TOC] 概念理解 Mask R-CNN (Regional Convolutional Neural Network: 区域卷积神经网络) 图像分类 (Classification): 图片中有气球。 语义分割 (Semantic Segmentation): 这些是图片中组成所有气球的像素。 目标检测 (Object Detection): 这里是图片中7个气球的位置。我们需要识别被遮挡的物体。 实例分割 (Instance Segmentation): 这是是图片中7个气球的位置,包括组成每一个气球的像素。 mAP: 均值平均精度(Mean Average Precision) Backbone: 骨干网络 backbone feature map : 骨干特征图 Feature Pyramid Network (FPN): 特征金字塔网络 Mask RCNN 的实现采用的是 ResNet101 + FPN 作为骨干网络 Region Proposal Network (RPN): 区域提议网络 Anchor: 锚点, RPN 通过扫描骨干特征图(backbone feature map ) 得到锚点的. SSD 中称为先验框Prior boxes Non-max Suppression : 非最大抑制, 在 RPN 预测过程中,我们会选择最可能包含物体的锚点,然后去修正它们的位置以及尺寸。如果有些锚点重叠得太多,我们会保留前景得分最高的一个,而其他的锚点就丢弃掉(这种方式成为非最大抑制 Non-max Suppression )。 ...

June 13, 2018

Overfitting and Regularization

[TOC] 1. underfitting and overfitting 我们利用多项式回归获得更加准确的拟合曲线,实现了对训练数据更好的拟合。然而,我们也发现,过渡地对训练数据拟合也会丢失信息规律。看两个概念: 欠拟合(underfitting):拟合程度不高,数据距离拟合曲线较远,如下左图所示。 过拟合(overfitting):过度拟合,貌似拟合几乎每一个数据,但是丢失了信息规律,如下右图所示,房价随着房屋面积的增加反而降低了。 我们有如下策略来解决过拟合问题: 减少特征数,显然这只是权宜之计,因为特征意味着信息,放弃特征也就等同于丢弃信息,要知道,特征的获取往往也是艰苦卓绝的。 不放弃特征,而是拉伸曲线使之更加平滑以解决过拟合问题,为了拉伸曲线,也就要弱化一些高阶项(曲线曲折的罪魁祸首)。由于高阶项中的特征 x 无法更改,因此特征是无法弱化的,我们能弱化的只有高阶项中的系数 θi。我们把这种弱化称之为是对参数 θ 的惩罚(penalize)。**Regularization(正规化)**正是完成这样一种惩罚的“侩子手”。 如下例所示,我们将 θ3 及 θ4 减小(惩罚)到趋近于 0,原本过拟合的曲线就变得更加平滑,趋近于一条二次曲线(在本例中,二次曲线显然更能反映住房面积和房价的关系),也就能够更好的根据住房面积来预测房价。要知道,预测才是我们的最终目的,而非拟合。 2. Regularized Linear Regression 在线性回归中,我们的预测代价如下评估: $$J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$$ 为了在最小化 J(θ) 的过程中,也能尽可能使 $θ$ 变小,我们将上式更改为: $$\begin{align*} J(\theta) &= \frac{1}{2m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum\limits_{i=1}^{n}\theta_j^2 \ &= \frac{1}{2m}(X\theta-y)^T(X\theta-y)+\lambda\sum\limits_{i=1}^{n}\theta_j^2 \end{align*}$$ 其中,参数 λ 主要是完成以下两个任务: 保证对数据的拟合良好 保证 $θ$ 足够小,避免过拟合问题。 λ 越大,要使 $J(θ)$ 变小,惩罚力度就要变大,这样 θ 会被惩罚得越惨(越小),即要避免过拟合,我们显然应当增大 λλ 的值。 那么,梯度下降也发生相应变化: $$\begin{align*} \theta_0 &=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} \ \theta_j &=\theta_j-\alpha\big(\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j\big) \quad (1) \ \mbox {即:}& \ \theta &= \theta-\alpha*(\frac{1}{m} X^T(y-X\theta) + \frac{\lambda}{m}\theta_{j}) \quad j \neq 0 \end{align*}$$ ...

May 20, 2018

Programming Exercise 2 Logistic Regression

[TOC] 1. Introduction 任务所要用到的文件 ex2.m - 运行主文件1 ex2 reg.m - 运行主文件1 ex2data1.txt - 主文件1训练数据 ex2data2.txt - 主文件2训练数据 submit.m - 提交任务函数文件 mapFeature.m - Function to generate polynomial features plotDecisionBoundary.m - Function to plot classifier’s decision bound- ary [?] plotData.m - Function to plot 2D classification data [?] sigmoid.m - Sigmoid Function [?] costFunction.m - Logistic Regression Cost Function [?] predict.m - Logistic Regression Prediction Function [?] costFunctionReg.m - Regularized Logistic Regression Cost ? 表示完成任务所要修改的文件 ...

May 15, 2018