资讯专栏INFORMATION COLUMN

Kubernetes 尝鲜

ashe / 1196人阅读

摘要:是谷歌官方根据自己容器经验开源的产品。当然,这不可能是,而且它的底层是替换成了,但是这不能掩盖它解决的问题。因此笔者决定尝试玩玩。不然启动会报错。

背景

容器技术在目前很火,而且确确实实的解决了很多的痛点,但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很难再实际生产中使用的。Kubernetes 是谷歌官方根据自己容器经验 Borg 开源的产品。当然,这不可能是 Borg,而且它的底层是替换成了 Docker,但是这不能掩盖它解决的问题。因此笔者决定尝试玩玩。

架构

根据官方文档的说明,Kubernetes 是使用 golang 写成,并且依赖 coreos/etcd 和 docker/docker 产品,Kubernetes 实际上是个分布式的 master-slave 架构,主要有以下组件 api-server、controller-manager、scheduler、proxy、kubelet,前面三个分别是 API 接口服务器、管理控制器、调度器,而后面两个则是网络派发代理和实际和 Docker 沟通的 agent。

部署

官方给出的下载安装文档简直简略的不能再简略了,而使用 yum 等包管理工具安装目前只能安装 2.x 版本最新而没有 3.x 的预编译包,不过没关系,我们可以直接下载预编译安装包。

etcd

etcd 是 coreos 为了进行分布式部署所做的键值存储服务,Github release 上面可以直接下载到最新的预编译包然后把其中的两个二进制文件扔到 /usr/local/bin 目录下就 ok 了。
至于配置文件和 systemd 单元文件也很简单,官方 github 上面已经提供了 systemd 启动文件,首先是添加一个名为 etcd 的系统用户(注意:是 daemon 用户,别加上乱七八糟的东西)

[Unit]
Description=etcd key-value store
Documentation=https://github.com/coreos/etcd

[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
ExecStart=/usr/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

而 etcd 实际上是使用环境变量作为配置的,具体可以参考 etcd 的 github 文档,这里提供笔者的单元文件

[Unit]
Description=etcd key-value store
Documentation=https://github.com/coreos/etcd

[Service]
User=etcd
Type=notify
WorkingDirectory=/usr/local/var/lib/etcd
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

直接把工作目录指定到 /usr/local/var/lib/etcd,这样默认情况下所有的数据文件都会存放在 default.etcd 文件夹下,不过注意这个目录需要手工创建并且制定合适的权限。不然 systemd 启动会报错。然后把启动文件放到 /etc/systemd/system/etcd.service
如果说具体的配置需要配,则应当再指定 EnvironmentFile=/path/to 指定一个环境变量文件,所有的配置都通过环境变量配置。

Docker

基本思路跟上面一个样,先下载二进制包,把二进制文件放到 /usr/local/bin 目录下,然后就是 systemd 单元文件,官方也在 Github 上提供了单元文件,直接拿下来用

[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target


[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket firewalld.service
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

需要注意的是上面有两个 systemd 文件,一个是 socket 启动文件,一个是正常的 docker 启动文件,这个特性来自于 1.12 版本,具体请参考官方的 ReleaseNote。
还有一点就是记得添加一个 docker 用户组

Kubernetes

同样是下载二进制包解压开来,进入 server 目录,解压 kubernetes-server-linux-amd64.tar.gz 文件,把解压文件里的 5 个组件放到 /usr/local/bin 目录(注意:就放上面提到的 5 个组件就行,其他的不用),还有一个就是 client 命令行 kubectl 文件。
然后添加 kube 系统用户。

useradd -c "kubernetes user" -d / -M -r -s /sbin/nologin kube

然后就是官方提供的 systemd 文件 https://github.com/kubernetes... 这里就不深入讲解了,因为实际上跟 etcd 基本一致,只不过 kubernetes 并不使用环境变量作为配置方式,所以必须在 systemd 启动文件中将环境变量转换为命令行参数传入。

未完待续

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26707.html

相关文章

  • K3s初探:Rancher架构师带你尝鲜史上最轻量Kubernetes发行版

    摘要:发布不到两天,上数已近,这个业界大热的史上最轻量的开源发行版,你试过了没资深架构师来教你走出尝鲜第一步使用教程在此前言昨天,正式发布了一款史上最轻量的开源发行版。大小只有,极简,轻便,易于使用。 发布不到两天,GitHub上Star数已近3000,这个业界大热的、史上最轻量的开源Kubernetes发行版,你试过了没? Rancher资深架构师来教你走出尝鲜第一步!使用教程在此! sh...

    neuSnail 评论0 收藏0
  • Kubernetes 尝鲜

    摘要:是谷歌官方根据自己容器经验开源的产品。当然,这不可能是,而且它的底层是替换成了,但是这不能掩盖它解决的问题。因此笔者决定尝试玩玩。不然启动会报错。 背景 容器技术在目前很火,而且确确实实的解决了很多的痛点,但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很难再实际生产中使用的。Kubernetes 是谷歌官方根据自己容器经验 Borg 开...

    KunMinX 评论0 收藏0
  • 灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?

    摘要:早在年针对高科技行业和高科技企业生命周期的特点,提出了著名的鸿沟理论。今天我们尝试以鸿沟理论为基础来分析云原生领域颠覆性的创新技术。回过头来看,灵雀云从早期全力投入技术栈,是最早进行产品化的厂商。 历史进入2019年,放眼望去,今天的整个技术大环境和生态都发生了很大的变化。在己亥猪年春节刚刚过去的早春时节,我们来梳理和展望一下整个云原生技术趋势的发展,是一件很有意义的事情,这其中有些变...

    hss01248 评论0 收藏0
  • Webpack5.0 新特性尝鲜实战

    摘要:而且作为一个版本,其中有一些,可能会导致一些配置和插件不工作。但这并无妨碍我们去开始对上的新特性进行尝鲜实战。 作者:志佳老师 本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章 前言 在老袁写这篇文章的时候,v5版本仍然处于早期阶段,可能仍然有问题。而且作为一个major版本,其中有一些breaking changes,可能会导致一些配置...

    curried 评论0 收藏0
  • [到codewars打怪兽]尝鲜箭头函数

    摘要:尝鲜箭头函数问题描述验证方式题目分析熟悉的新的函数构造方式箭头函数。箭头函数总是匿名的。我的解法优解和搭配构造可构造有名函数。单句声命可省略。可被非关键字就不能用。 [7 kyu]Sort with Arrow Functions 尝鲜箭头函数⌚️2016.03.08 问题描述: showImg(http://ww4.sinaimg.cn/large/006m2mhTgw1f1p5d9...

    WelliJhon 评论0 收藏0

发表评论

0条评论

ashe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<