虚拟化技术Kubernetes文章集锦金融基础技术与业务

kubernetes学习笔记

2015-07-07  本文已影响13057人  Harvey_L

docker实现了更便捷的单机容器虚拟化的管理, docker的位置处于操作系统层与应用层之间;

处于这样一个位置在单机使用docker进行业务部署是可以感觉到质的提升; 但是针对跨机器, 大规模, 需要对业务质量进行保证的时候, docker本身又有些不足, 而传统的运维自动化工具无论是在docker内部部署还是用来管理docker都显得有些不伦不类.

Kubernetes则实现了大规模,分布式, 并且确保高可用的docker集群的管理.

1: 理解Kubernets

理念:

可以把kuberntes理解为容器级别的自动化运维工具, 之前的针对操作系统(linux, windows)的自动化运维工具比如puppet, saltstack, chef所做的工作是确保代码状态的正确, 配置文件状态的正确, 进程状态的正确, 本质是状态本身的维护; 而kubernetes实际上也是状态的维护, 只不过是容器级别的状态维护; 不过kubernetes在容器级别要做到不仅仅状态的维护, 还需要docker跨机器之间通信的问题.

相关概念

架构实现

整个架构大体分为控制节点和计算节点; 控制节点发命令, 计算节点干活.

架构图
首先试图从图本身试图对架构做一些理解

2: Kubernetes部署

主机环境

110和111部署etcd, 110作为kubenetes的控制节点, 111和112作为计算节点

环境准备:

1: etcd

etcd是一个分布式, 高性能, 高可用的键值存储系统,由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。

2: kubenetes

3: Kubernetes使用

3.1 基本应用

kubenetes的管理实际上就是针对pod, rc, services的管理, 命令行针对kubenetes的管理建议基于配置文件进行, 这样更便于管理, 也更规范
<pre>
kubectl create -h
Create a resource by filename or stdin.
JSON and YAML formats are accepted.
Usage:
kubectl create -f FILENAME [flags]
Examples:
// Create a pod using the data in pod.json.
$ kubectl create -f pod.json
// Create a pod based on the JSON passed into stdin.
$ cat pod.json | kubectl create -f -
</pre>

思路: 每个pod内提供一组完整的服务

3.2 业务更新

基本的业务部署完成后, 在服务要更新的时候, kubenetes可以利用滚动更新,基本上实现了业务的热更新.
<pre>

kubectl rolling-update wechatv3 -f wechatv3.yaml

Creating wechatv4
At beginning of loop: wechatv3 replicas: 0, wechatv4 replicas: 1
Updating wechatv3 replicas: 0, wechatv4 replicas: 1
At end of loop: wechatv3 replicas: 0, wechatv4 replicas: 1
Update succeeded. Deleting wechatv3
wechatv4
</pre>

3.3 应用管理

当需要同一服务需要启动多个实例, 服务本身一样, 但是启动服务的配置不一样时候
一般我们可能会有3种需求:

可以在配置文件中针对不同的container设置不同的设置.
<pre>
apiVersion: v1beta3
kind: ReplicationController
metadata:
name: new
labels:
name: new
spec:
replicas: 1
selector:
name: new
template:
metadata:
labels:
name: new
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
- name: postgres
image: opslib/wechat_db
ports:
- containerPort: 5432
- name: wechat
image: opslib/wechat1
command: #container的启动命令有外部定义
- '/bin/bash'
- '-c'
- '/usr/bin/wechat_api'
- '--config=/etc/wechat/wechat.conf'
resources: #限制container的资源
request: #请求的资源
cpu: "0.5"
memory: "512Mi"
limits: #最大可以使用的资源
cpu: "1"
memory: "1024Mi"
ports:
- containerPort: 80
volumeMounts: #挂载目录
- name: data
mountPath: /data
volumes:
- name: data
</pre>

参考文章:
上一篇下一篇

猜你喜欢

热点阅读