云原生相关(TODO)
2024-09-03 13:50:45 15 举报
AI智能生成
Linux、Docker、K8S相关的内容,待补充。
作者其他创作
大纲/内容
Linux
常用命令
文件与目录
文件管理
cat
chmod
chown
diff
find
git
less
more
mv
rm
cp
scp
awk
touch
文档编辑
sed
文件传输
ftp
网络
磁盘
磁盘管理
cd
du
mkdir
df
pwd
tree
mount
磁盘维护
网络通讯
系统管理
adduser
useradd
date
sleep
kill
login
ps
top
reboot
shutdown
sudo
uname
who
history
free
系统设置
chroot
clear
crontab
备份压缩
gzip
tar
unzip
zip
Shell编程
变量
参数
数组
echo
printf
test
流程控制
函数
输入输出重定向
Linux零拷贝
工具
yum
vi/vim
curl
git
Docker
Docker VS 虚拟机
Docker安装
百度清华镜像源
镜像源代理
去阿里云ACR看去
概念
镜像
容器
网络
卷
卷挂载
将服务器上的目录与容器内目录关联,会覆盖容器目录内容,启动时,服务器上的目录要准备好对应的文件
示例:-v /app/nghtml:/usr/share/nginx/html
卷映射
将容器内部的某个目录和某一个volume映射,会把容器里的文件内容同步出来
示例:-v ngconf:/etc/nginx
仓库
例:Docker Hub
常用命令
通用操作
docker df
docker help
docker login
docker info
docker history
docker logout
容器
docker restart
docker start
docker logs
docker commit
正常情况下别这样玩,提交个黑盒子出来谁也不知道你做了什么,写Dockerfile build出来!
docker stats
docker ps
dockr rm
docker stop
docker exec
docker run
docker copy
docker inspect
镜像
docker build
docker push
docker images
docker pull
docker tag
docker rmi
docker search
网络
docker network
卷
docker volume
Dockerfile
网上找个模板照着改就完事了
常用指令
FROM
指定基础镜像,用于后续的指令构建。
LABEL
添加镜像的元数据,使用键值对的形式。
RUN
在构建过程中在镜像中执行命令。
CMD
指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT
设置容器创建时的主要命令。(不可被覆盖)
EXPOSE
声明容器运行时监听的特定网络端口。
ENV
在容器内部设置环境变量。
ADD
将文件、目录或远程URL复制到镜像中。
COPY
将文件或目录复制到镜像中。
VOLUME
为容器创建挂载点或声明卷。
WORKDIR
设置后续指令的工作目录。
DockerCompose
这个基本上也是网上找个差不多的目标,根据需要改就行了
yaml文件指令参考
version
指定本 yml 依从的 compose 哪个版本制定的。
services
networks
volumes
常用命令
docker compose up -d -f xxx.yaml
docker compose scale
docker compose stop containid
docker compose start/restart containid
docker compose down
docker compose ps
docker compose build
docker compose top
docker compose logs
Docker SWARM
这个编排容器的我属实没用过,直接就跳到k8s了
网络模式
自定义
bridg
桥接默认
host
和宿主机的端口一一对应
none
不使用网络功能
container
指定新容器和某一个存在的容器共享网络
Docker实现原理
隔离文件:chroot
隔离访问:namespaces
隔离资源:cgroups
封装系统:LXC
Docker 在镜像的设计中,引入了层(layer)的概念。也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量 rootfs。这叫叫作联合文件系统(Union File System)
一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。
Kubernetes
Kubernetes解决了什么?
为用户提供一个具有普遍意义的容器编排工具
核心组件
etcd
保存了整个集群的状态,理解成后端数据库得了
基于 RAFT 的一致性,节点数必须为奇数
apiserver
提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
controller manager
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler
负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
kubelet
负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理
Container runtime
负责镜像管理以及 Pod 和容器的真正运行(CRI)
kube-proxy
负责为 Service 提供 cluster 内部的服务发现和负载均衡
其他
kube-dns 负责为整个集群提供 DNS 服务
Ingress Controller 为服务提供外网入口
Heapster 提供资源监控
Dashboard 提供 GUI
Federation 提供跨可用区的集群
Fluentd-elasticsearch 提供集群日志采集、存储与查询
基本概念
Namespace
Pod
Pod 最重要的一个事实是:它只是一个逻辑概念。Pod,其实是一组共享了某些资源的容器。
共享Network Namespace
共享Volume
生命周期
Pending
Running
Succeeded
Failed
Unknown
Container
Deployment
Deployment 实际上是一个两层控制器。首先,它通过ReplicaSet 的个数来描述应用的版本;然后,它再通过ReplicaSet 的属性(比如 replicas 的值),来保证 Pod 的副本数量。
Deployment 控制 ReplicaSet(版本),ReplicaSet 控制 Pod(副本数)。这个两层控制关系一定要牢记。
Service
my-svc.my-namespace.svc.cluster.local-》serviceip-》podip
Service 是由 kube-proxy 组件,加上 iptables 来共同实现的
一直以来,基于 iptables 的 Service 实现,都是制约 Kubernetes 项目承载更多量级的 Pod 的主要障碍。
而 IPVS 模式的 Service,就是解决这个问题的一个行之有效的方法
而 IPVS 模式的 Service,就是解决这个问题的一个行之有效的方法
ClusterIP(默认)
集群的内部 IP 公开 Service,选择该值时 Service 只能够在集群内部访问
NodePort
通过每个节点上的 IP 和静态端口(NodePort)公开 Service。
LoadBalancer
使用云平台的负载均衡器向外部公开 Service。
ExternalName
将服务映射到 externalName 字段的内容(例如,映射到主机名 api.foo.bar.example)。 该映射将集群的 DNS 服务器配置为返回具有该外部主机名值的 CNAME 记录。 集群不会为之创建任何类型代理。
Headless
不会获得集群 IP,kube-proxy 不会处理这类 Service, 而且平台也不会为它们提供负载均衡或路由支持。
Job
CronJob
DaemonSet
StatefulSet
ConfigMap
Ingress
PV
PVC
YAML文件详解
容器网络
在默认情况下,被限制在 Network Namespace 里的容器进程,实际上是通过 Veth Pair 设备 + 宿主机网桥的方式,实现了跟同其他容器的数据交换。
容器“跨主通信”的问题
Flannel,VXLAN 模式
Calico
资源请求和限制
requests
保底分配的资源,调度是根据这个值
limits
最大资源使用上限
0 条评论
下一页