学习K8S(1)

Sat 13 June 2020

学习K8S (1)

Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。云原生的中流砥柱。

背景介绍

K8S是kubernetes的缩写,因为这个词k开头s结尾,并且中间有8个字母。顺带说一下还有一个K3S的K8S发行版(k3s命名的意图是他们的名字长度只有K8S的一半,暗示这个版本的轻量级)。

K8S和Google有着不寻常的联系,虽然在Google内部也有类似这样的一套系统https://queue.acm.org/detail.cfm?id=2898444,并且Google是K8S的主力开发,但实际上K8S和Google的Borg是没有任何代码上的联系。说得准确点是K8S受Borg论文的启发而新建的一个开源项目,并且Google积极的参与了这个项目。

现在主流的云计算厂商都在公有云上提供了K8S的托管服务(使用者只需要参与node节点的运维)。

K8S的功能

K8S的功能主要体现如下:

快速的伸缩能力

水平方向:以Deployment为例,服务可以快速的增加和减少副本数。虽然传统云计算也方便对虚拟机进行扩索容,但他们依赖已经制作好的系统盘和数据盘的惊喜,而K8S只需要容器的image。从粒度和管理的便捷程度都是K8S胜出。作为开发者可以把容器的image作为deploy的payload,但数据盘显然不合适。

垂直方向:在伸缩CPU和内存规格上,K8S就更胜一筹。K8S提供了对Resource的Request和Limit机制,Request是保证给服务的资源,Limit是对服务资源上限的限制。这个机制不会像虚拟机那样是一个固定值,用不到就浪费。

无论是那个方向上的伸缩,你只要通过声明式API给定一个目标,剩下的调度操作都交给K8S。而在传统云计算,对虚拟机的这些调整依赖性运维的手工调整,或者DevOps针对特定云厂商API的编程调度。

服务发现和负载均衡

K8S提供了一套简单的基于DNS的服务发现机制,它虽然有些简陋,你只能通过服务名得到服务的虚拟IP,连服务端口信息都得不到。但它的好处是和编程语言无关,不同语言编写的服务都可以享受这个便利可靠的基础设施。

K8S内部对于Service实现了一套负载均衡机制,这个负载均衡虽然不是完美的,但满足了大部分基于短连接请求的服务调用场景。此外它还设计了一套外部负载均衡机制,满足Service像集群外部暴露的需求。

网络和流量机制

安装一个学习用的K8S集群

mkdir ~/bin
export PATH=$HOME/bin:$PATH
curl -Lo ~/bin/minikube https://mirrors.tuna.tsinghua.edu.cn/github-release/kubernetes/minikube/LatestRelease/minikube-darwin-amd64
xattr -c ~/bin/minikube
brew install kubernetes-cli
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

K8S面向使用者的组件

Pod


Deployment


Service


Ingress


其他

Category: 云原生 Tagged: K8S Kubernates 云原生

comments


学习 Tensorflow(3)

Fri 12 January 2018

学习 Tensorflow (3)

Estimator

官方资料参考 https://www.tensorflow.org/api_docs/python/tf/estimator

Estimator 一个非常赞的 High-level 封装。

tensorflow programming environment

Estimator 的架构如下:

estimators struct

对外提供的四个功能接口:

  • train, 训练模型
  • evaluate, 验证测试集
  • predict, 利用模型进行预测
  • export_savedmodel, 将模型导出给 tensorflow serving 使用

我们需要给 estimator 提供input_fn,怎么读取解析训练数据或者测试数据。predict_input_fn,怎么解析预测数据。

Estimator 帮我们实现了 train 和 eval 的 loop,并且会 catch 正常的 DataLoss 错误 …

Category: 机器学习 Tagged: Tensorflow 深度学习 DNN TFRecords

comments

Read More

学习Tensorflow(2)

Wed 06 December 2017

学习Tensorflow (2)

如果你对Tensorflow不是怎么了解,建议你先阅读入门的教程。

Spark生成TFRecords格式

官方推荐的也是效率最高的训练数据的组织形式就是TFRecords格式。Spark是大数据处理的神器,处理完的数据放在hdfs上,Tensorflow可以直接读取。

很多公司的训练数据准备都是用Spark进行处理的,Google也为我们提供了在Spark中生成TFRecords格式的方法:https://github.com/tensorflow/ecosystem/tree/master/hadoop

因为Tensorflow用的protobuf版本和Hadoop的不一样,所以要新引入一个jar包,这个jar包在编译的时候用shade把protobuf的包名改名。注意protoc的版本,按照文档说明编译,基本上不会出错。

import org.tensorflow.hadoop.shaded.protobuf.ByteString
import org.apache.hadoop.io.{NullWritable, BytesWritable}
import org.apache.spark.{SparkConf, SparkContext}
import …

Category: 机器学习 Tagged: Tensorflow 深度学习 DNN TFRecords

comments

Read More

学习Tensorflow(1)

Tue 28 November 2017

学习Tensorflow (1)

Tensorflow随着AlphaGO变得家喻户晓。这说明Google的宣传能力很强,导致新入坑的人会优先考虑Tensorflow。同样作为转型到这个领域的新入门者,我把我遇到的问题和大家分享。

接下来的系列我大概会介绍的内容包括:

  • 编译安装
  • 从Low level到High level
    • 线性回归, 逻辑回归
    • DNN版本的mnist
  • 特征输入
    • Python和Spark生成tfrecords
    • 特征的解析
    • 特征工程的
  • Wide and Deep综合项目
    • 从高层到底层
    • Embedding
  • 模型的使用
    • Tensorflow Serving
    • 导出模型给其他语言使用
  • 其他补充

本系列内容偏实践,一些算法和DNN理论上的知识请大家自己学习。

大家有什么问题和建议可以发email给我。

怎样学习

先不要买书

现在市面上的书基于的Tensorflow版本都很旧,API发生了很多变化,所以没有必要买书,看书还会带来干扰。另外写那些书的是以写书为目的,只是介绍基本的用法,能捎带上他们实际项目经验的很少。

先不要买GPU

除非你是以实践深度学习为名,以玩游戏为实。目前Tensorflow官方支持的显卡只有Nvidia品牌的,因为底层使用了CUDA的库。

AMD在深度学习这一块也想分杯羹,推出了HIP中间层,已经移植出了cafe的版本,Tensorflow的版本在 …

Category: 机器学习 Tagged: Tensorflow 深度学习 DNN

comments

Read More

Android N的限制

Fri 08 July 2016

Android N的限制

因为研究Android插件化的缘故,所以对新系统对插件化的影响很关注。

classloader-namespace问题

N早期的预览版存在这样一个问题:

04-13 14:32:46.073 25571-25571/? W/System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/user/0/com.xxx.yyy/files/storage/com.aaa.bbb/version.1/lib/libxxx.so" is not accessible for the namespace "classloader-namespace"

很庆幸这个问题在最新的preview版里面已经修正了。这问题的原因大概如下:

Java的代码在执行System.load(...)时 …

Category: Android Tagged: Android

comments

Read More

Mac命令行格式化U盘

Tue 28 June 2016

Mac 命令行格式化 U 盘

先用 diskutil 查看 U 盘设备的名称

diskutil list

2016-06-28_23:39:22.jpg

上图/dev/disk2就是 U 盘了,其实是一个 32GB 的 TF 卡。

然后用下面的命令把它格式化:

sudo diskutil eraseDisk FAT32 CAM_STORE MBRFormat /dev/disk2

其中CAM_STORE是格式化后的卷标。

2016-06-28_23:43:19.jpg

成功格式化。

Category: Mac Tagged: Mac FAT32 U盘

comments

Read More

Git一些问题的解法

Sat 18 June 2016

Git一些问题的解法

中文文件名乱码

这个问题在Mac上必然遇到,git status 遇到中文路径就不能正常显示。

git config --global core.quotepath false

刚clone回来的代码就发生了修改

这个看起来超级诡异,因为你没有修改代码,但 git status 却报告有文件修改了。这个原因是和文件系统是否大小写敏感有关。

Mac上大家默认是格式化为大小写不敏感(另一种是大写敏感),Windows上NTFS也存在这个问题。如果 a.hA.h 在仓库里同目录下存在,就会发生这种情况。

解决的方法有两种,看实际情况选择:

  • 修改core.filemodegit config core.filemode=true/false
  • 另一种,创建一个大小写敏感的虚拟磁盘使用,例如在Mac上编译Android ROM

git svn手工添加远程分支

git config …

Category: Mac Tagged: Mac Git

comments

Read More

格力真的掌握核心科技吗?

Wed 15 June 2016

格力真的掌握核心科技吗?

掌握核心科技这是个洗脑式的广告,让很多对格力不了解的人觉得格力技术不错。

我遇到的问题

家里 4 台空调,其中 2 台格力,2 台美的。用得最多的是主卧的格力 1.5P 凉之静,也就是这台空调让我对格力的技术和服务心寒。

主卧的格力空调一直有噪音问题,格力的售后服务来了很多次(至少 3 个师傅,人均至少 1 次)都没能解决。晚上睡觉的时候就感觉附近有个拖拉机,在吐吐吐吐的响。非常影响睡眠,人很容易变得烦躁。

一天主卧的空调噪音变得异常的响,便把小孩带到客房睡觉,结果小孩掉进床和墙之间的缝隙里了。之前一直睡主卧,有遮挡的保护措施,客房没有。

修了很多次都修不好,最好的情况是走的时候 OK,晚上到半夜的时候就响起来了。每每看到董小姐在电视上说~~格力空调掌握核心科技~~就来气。

最新情况:空调又出现了 H5 故障,这是第二次了,第一次还了一个主板。

  • 视频 …

Category: Life Tagged: Life 空调 小米 大金

comments

Read More

在Mac OS X上编译Android ROM

Sun 06 December 2015

在Mac OS X上编译Android ROM

在Linux上编译Android的文章已经很多了,但Mac上编译的却很少。本文完整的演示如何在Mac OS X上编译出一个给Galaxy Nexus使用的4.3.1的ROM出来。使用的Mac系统版本是10.11

背景

我们在编译Android源码的时候,可以编译出3种类型的版本:

  1. Eng: 工程版, 有root权限,可以调试任意进程, adb调试默认开启
  2. User: 编译final release版本使用
  3. UserDebug: 和User版差不多, 可以调试任意进程, adb调试默认开启

我们选择Eng版进行编译,模拟器默认就是这个版本。编译这个版本的目的为了debugActivityThread和系统服务。

准备

  1. 准备文件系统
  2. 下载代码和二进制文件
  3. 安装必要的软件

准备文件系统

Android的编译需要 大小写敏感 的文件系统, 而Mac用户通常使用的是大小写不敏感的。如果自己有USB3.0或者Thunderbolt接口的外置存储,可以在外置存储上分出一个卷来格式化成Mac的日志式大小写敏感的文件系统。如果没有的话,我们利用稀疏文件创建出一个虚拟的磁盘。下面介绍后者:

hdiutil …

Category: Android Tagged: Android Mac ROM Framework

comments

Read More

谈谈Android的进程

Sun 01 November 2015

谈谈Android的进程

原创内容转载请注明源地址: http://jksoftcn.com/

Android的底层虽然是Linux,但是它的进程管理机制和Linux还是有些差异的。

传统层面的进程

传统层面的进程规则还是和Linux一样

init是1号进程,这是Linux内核启动的第一个应用层程序,其他进程都是1号进程的子孙。 进程可以fork出自己的子进程。这意味着你使用JNI在APP中调用fork函数fork出子进程。

Android层面的进程

APP进程虽然本质上是Linux进程,但这个层面的游戏规则不一样了

所有正常启动的APP进程都是zygote创建出来的子进程。因为zygote已经创建好虚拟机了,并且预加载了framework,由zygote fork可以让其他APP进程直接使用zygote创建好的虚拟机环境,省了很多事。

一个APP可以拥有多个进程,即:不同的组件运行在不同的进程。但同一个APP的不同进程间是平级的,没有从属关系,父进程都是zygote。看了下面的内容,应该能理解这么设计的意图。

APP默认的进程名是APP的包名,可以指定组件运行在:xxx这样相对命名进程里面,实际上是packageName:xxx

不同的APP …

Category: Android Tagged: Android Linux Process

comments

Read More
Page 1 of 2

Next »