【持续更新】笔记整理-20170714-Kubernetes 入门

19 篇文章 0 订阅
8 篇文章 0 订阅

基于很久没有开灶写博客了,决定周末整理一下之前入手的 k8s,毕竟再不整理就又要忘了。

Docker 开始

缘何而来

Paas 由来久远,但还是免不了巨大的搭建开销。同样在软件项目中,(搭建技术栈->构建基础技术->模拟测试)整个过程的耗费时间长,资源隔离不彻底,部署代价巨大,Docker 在这些方面恰好有很大的优势。

Docker 的几个重要概念

namespace

cgroup

子系统(资源控制器),管理 cpu, iops, network, memory, device access

LXC

比较方向结果
性能LXC >> KVM >> XEN
内存利用率LXC >> KVM >> XEN
隔离程度XEN >> KVM >> LXC

AUFS

共享文件系统

全生命周期开发模式

Build + Ship + Run

App 打包

Kernel + BaseImage + Self Images + Container

Daemon

用于绑定本地端口,提供 RESTful API(k8s 的基础)

Docker 基本命令

docker version
  1. /etc/sysconfig/docker
  2. /usr/lib/systemd/system/docker.service

OPTIONS=
- -H

-H=unix:///var/run/docker.sock
-H=tcp://0.0.0.0:2375
  • –registry-mirror 镜像地址
  • –insecure-registry 本地私有 Docker Registry 地址 (:5000)
  • –selinux-enabled 是否开启 SELinux,默认开启 (=true)
  • –bip 网桥 docker0 使用指定 CIDR 网络地址
  • -b 已创建好的网桥
http_proxy = xx.xx.xx.xx:8080
https_proxy = xx.xx.xx.xx:8080
docker search xxx
docker pull xxx [repo:tag]
docker images
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG]
  • -d 后台执行
  • -it 数据交互
  • –name
  • –cidfile=”” container-id输出到指定文件
  • –privileged 特权模式(删除容器后目录仍然存在)
  • -v [本地容器] 容器目录
docker inspect [containerId] // 可以看到 Volume 信息
docker create/start/stop/pause/unpause
docker ps // 所有运行过的容器都会出现在输出中
docker run -rm // 临时性,用完后就会被 remove 掉

docker commit <container> [repo:tag] // 快速方便,但不规范,且无法自动化,因而需要使用 buildfile 语法(supervisor)
docker build -t xx/xx .

Docker 友好程序架构

利用 etcd/zookeeper 将配置从 Docker Image 中剥离

容器互联

基于 Volume 互联

  • /var/lib/docker/graph 本地 image 的分层信息
  • /var/lib/devicemapper/devicemapper/data Image 和 Container 的二进制数据文件
  • /var/lib/devicemapper/devicemapper/metadata 相关元数据
  • 单主机容器间互联 –volumes-from=[containerId]
  • 跨主机共享互联
    • iscsi
    • nfs
    • ceph
    • 分布式文件系统
  • –icc=true 关闭互通
  • –link=name:alias 连接指定 container(会在 /etc/hosts 中生成对应的 ip 映射)
  • – iptables=true 开启防火墙(iptables-save)

基于网络的互联

docker-proxy
- 端口映射 NAT : docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8066 -container-ip 172.17.0.15 -container-port 3306
- 直接使用宿主机网络 host-only (不能启动两个同端口启动的进程)[无法负载均衡] 有限且无法重复占用 : –net=host
- 容器共用一个 ip 网络 : –net=container:mysqlserver(同 ip 使用 localhost 互访)此概念在 k8s 中有重要意义 跨主机可访问任意进程

容器网络机制

Linux 路由机制打通网络

systemctl daemon-reload # 重载所有修改过的配置文件
iptables -F; iptables -t nat -F
tshark -f icmp; tshark -i docker0 -f icmp
  • 传统网络
  • 双网卡独立/大二层交换 Linux Bridge
  • Overlay 网络:GRE(tcp)/VXLAN(udp)
  • 基于 OVS 的 Overlay 网络:GRE Tunnel
  • Neutron 网络
  • Libnetwork (New -> In k8s Used)方便不同 Container 之间共用网段

Linux Namespace

Namespace 间通信使用 veth pair / Linux Bridge

brctl show
docker inspect -f '{{state.pid}}' containerId
mkdir -p /var/run/netns; ln -s /proc/xx/ns/net /var/run/netns/xx
ip netns exec xxx ethtool -S eth0

OVS + Docker

Open vSwitch (Security / Monitoring / QoS / Automated Control)

ovs-vsctl add-br br0
ovs-vsctl add-port br0 gre1 --set-interface gre1 type=gre option:remote_ip=192.168.18.128
brctl addif br0 docker0
ip link set dev br0 docker0
ip link set dev br0 up
ip link set dev docker0 up
iptables -t nat -F; iptables -F
ip route add 172.17.0.0/16 dev docker0

Docker 管理工具

  • Docker Machine
  • Swarm
  • Docker Compose
  • Tutum
  • Shipyard -> 基于 web
  • cAdvisor -> 实时监控

Kubernetes

重要概念

Namespace

多租户资源隔离

Resource

某个 NS 下有状态可关联/可限定配额/可持久化到 etcd 的资源对象

Label

任意定义的 K-V 对,用于过滤和选择资源,与资源相关

Volumes

Pod 存储卷,可被多个容器使用

Master 节点

提供资源访问入口的管理节点

Node

Linux 工作节点(负载节点)自修复,接受 Master 管理,并启动和管理 Pod 实例

Pod

k8s 中最小任务调度单元,可在任意 Node 上修复 Pod 内共享资源(网络/Volumes)

Service

微服务容器/容器隔离/TCP/无状态/多实例/默认外部不能访问/滚动升级

Replication Controller

Pod 副本控制器,限定当前实例个数,滚动升级提供方,属于 Service 集群控制范畴

集群部署

kubectl get pods/namespace/...
kubectl cluster-info
kubectl describe pods/...
--rollback
kubectl scale # 扩容
kubectl rolling-update # 滚动升级
  • 服务注册与发现 -> 不变的虚拟 ip + 端口
  • 负载均衡 -> kube-proxy
  • 规模部署 -> 确定实例数,系统自动调度
  • 自监控,自修复

分布式网络方案

  • openvswitch 灵活/对现有物理网络无要求/业界主流/性能低/复杂度高/Troubleshooting 难
  • 路由技术 常规路由技术/使用传统网络技术/简单/高性能/灵活性低/与现有网络融为一体
  • Flannel 结合路由机制与隧道技术(UDP 封装 -> etcd 存储子网拓扑与路由表) FLANNEL_ETCD=”http://xx.xx.xx.xx:4001”

负载均衡与网络拓扑

Service

  1. 单体程序:
    • 先天性,难以分布式部署和扩容
    • 系统性,组建缺陷导致进程崩溃
    • 运维风险,系统升级/bug 修复/故障排查都存在风险
    • 难以可持续发展,难以复用原有服务
  2. 微服务架构
    • 先天分布式
    • 无状态 -> 平滑扩容
    • 积木式发展

Proxy 网络代理 & 负载均衡器

  • 运行在每个 Node 上
  • 代理每个服务的请求
  • 保持会话/自动排查故障点

API

swagger-ui
ku8-eye (ku8 eye-web / ku8 eye-ansible)

现有 docker + k8s 如何自改并提交

docker ps | grep xxx
docker commit {docker id}
kubectl exec -it xxx /bin/bash

Mark

将 filename 所有文本中的 previous 替换为 new

sed -i 's/previous/new/g' filename
软件设计师教程笔记整理——XMind文件是一种方便而有效的方法,用于帮助软件设计师整理和管理他们的学习笔记。XMind是一个强大的思维导图工具,可以辅助软件设计师将复杂的概念和信息整理成可视化的思维导图。以下是一些关于如何使用XMind整理软件设计师教程笔记的方法。 首先,在创建XMind文件之前,确定整理笔记的主题和目标。软件设计师教程可能涉及到多个主题,如需求分析、系统设计、编码技术等。根据教程的内容,创建适当的主题和子主题,以帮助分类和组织信息。 其次,使用XMind的多样化功能来补充思维导图。通过添加文本、图片、链接和附件等元素,增强思维导图的可读性和信息密度。例如,可以在节点中添加关键概念的定义、示意图、参考链接或相关文档,以便将来复习、研究或进一步学习。 第三,合理使用颜色和样式来区分不同类型的信息。XMind提供了丰富的颜色和样式选项,可以用来标记重要的内容、不同类型的问题或者需要进一步研究的部分。使用颜色和样式可以帮助软件设计师更快地浏览和理解思维导图。 最后,定期更新和完善XMind文件。软件设计师教程是一个不断更新和发展的领域,因此笔记更新也是非常重要的。软件设计师应该根据自己的学习进度和新增知识,及时更新XMind文件中的内容,以保持其有效性和准确性。 总的来说,软件设计师教程笔记整理-XMind文件是一个有用的工具,可以帮助软件设计师更好地组织和管理他们的学习笔记。通过合理使用XMind的功能和特点,软件设计师可以轻松地将教程中的关键信息整理成可视化的思维导图,并随时更新和完善。这将有助于软件设计师提高学习效率和工作效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值