基于很久没有开灶写博客了,决定周末整理一下之前入手的 k8s,毕竟再不整理就又要忘了。
Paas 由来久远,但还是免不了巨大的搭建开销。同样在软件项目中,(搭建技术栈->构建基础技术->模拟测试)整个过程的耗费时间长,资源隔离不彻底,部署代价巨大,Docker 在这些方面恰好有很大的优势。
子系统(资源控制器),管理 cpu, iops, network, memory, device access
比较方向 | 结果 |
---|---|
性能 | LXC >> KVM >> XEN |
内存利用率 | LXC >> KVM >> XEN |
隔离程度 | XEN >> KVM >> LXC |
共享文件系统
Build + Ship + Run
Kernel + BaseImage + Self Images + Container
用于绑定本地端口,提供 RESTful API(k8s 的基础)
docker version
OPTIONS=
- -H
-H=unix:///var/run/docker.sock
-H=tcp://0.0.0.0:2375
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]
-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 .
利用 etcd/zookeeper 将配置从 Docker Image 中剥离
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 中有重要意义 跨主机可访问任意进程
systemctl daemon-reload # 重载所有修改过的配置文件
iptables -F; iptables -t nat -F
tshark -f icmp; tshark -i docker0 -f icmp
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
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
多租户资源隔离
某个 NS 下有状态可关联/可限定配额/可持久化到 etcd 的资源对象
任意定义的 K-V 对,用于过滤和选择资源,与资源相关
Pod 存储卷,可被多个容器使用
提供资源访问入口的管理节点
Linux 工作节点(负载节点)自修复,接受 Master 管理,并启动和管理 Pod 实例
k8s 中最小任务调度单元,可在任意 Node 上修复 Pod 内共享资源(网络/Volumes)
微服务容器/容器隔离/TCP/无状态/多实例/默认外部不能访问/滚动升级
Pod 副本控制器,限定当前实例个数,滚动升级提供方,属于 Service 集群控制范畴
kubectl get pods/namespace/...
kubectl cluster-info
kubectl describe pods/...
--rollback
kubectl scale # 扩容
kubectl rolling-update # 滚动升级
swagger-ui
ku8-eye (ku8 eye-web / ku8 eye-ansible)
docker ps | grep xxx
docker commit {docker id}
kubectl exec -it xxx /bin/bash
将 filename 所有文本中的 previous 替换为 new
sed -i 's/previous/new/g' filename