一.参考
安装1.23.0版本的k8s,更高版本会报错 master node not found.
kubeadm config images list下载指定版本 kubeadm配置文件_温柔一刀的技术博客_51CTO博客
Kubernetes集群安装与配置详解:从环境准备到工具安装全方位指南!_kubernetes安装详解-CSDN博客
VMware 安装 Centos7 超详细过程 | 菜鸟教程
K8S集群搭建------cri-dockerd版(包含问题解决方案)-CSDN博客
https://www.cnblogs.com/liuzhonghua1/p/18010847
kubeadm config images pull 拉取镜像失败的问题-CSDN博客
kubeadm init后看不到镜像 kubeadm node not found_mob64ca1405a060的技术博客_51CTO博客
二.背景
多台应用的自动发布部署。
根据不同机器的性能,自动调度、抢占、下线pod到不同机器。
不同的pod,ip是内网地址,如何互相通信.
三.架构
四.示例
1.cgoups
支持的subsystem
bash
root@myweb-57c44474d8-45jwv:/usr/local/tomcat/webapps/demo# stat -fc %T /sys/fs/cgroup
tmpfs
root@myweb-57c44474d8-45jwv:/usr/local/tomcat/webapps/demo# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 10 18 1
cpu 2 128 1
cpuacct 2 128 1
memory 8 128 1
devices 4 128 1
freezer 9 18 1
net_cls 7 18 1
blkio 11 128 1
perf_event 5 18 1
hugetlb 6 18 1
pids 3 128 1
net_prio 7 18 1
测试脚本
bash
i=0; while [ True ]; do i=$i+1;done;
运行发现cpu使用 100%.
执行cgroups限制脚本如下:
bash
[root@k8s-node1 Downloads]# mkdir /sys/fs/cgroup/cpu/test1
[root@k8s-node1 Downloads]# echo $$ > /sys/fs/cgroup/cpu/test1/tasks
[root@k8s-node1 Downloads]# echo 10000 > /sys/fs/cgroup/cpu/test1/cpu.cfs_quota_us
[root@k8s-node1 Downloads]# more /sys/fs/cgroup/cpu/test1/cpu.cfs_quota_us
10000
在运行测试脚本,发现cpu只使用了10%.
2.k8s部署
mysql和myweb的deployment和service部署示例.
访问地址:http://192.168.12.130:30001/demo/index.jsp
其中,yaml文件如下:
mysql-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
myweb-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
labels:
app: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
env:
- name: MYSQL_SERVICE_HOST
value: 10.98.65.219
ports:
- containerPort: 8080
myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
五.概念
1.cgroups
用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等).
2.kubernetes
Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理.
3.node
一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行pod所需的服务.节点上的组件包括 kubelet、 容器运行时(docker)以及 kube-proxy.
4.namespace/context
在单个集群中隔离 API 资源组的机制.将租户的工作负载划分到各不相同的逻辑管理单元中。
5.service/ClusterIp
将运行在一个或一组pod上的应用公开为外部服务的方法.
6.endpoint
service中的一组ip和port.
7.endpointSlice
8.deployment
管理应用的一组 Pod,通常适用于无状态的负载。
9.replicatSet/statefulSet/daemonSet/job
维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合.
10.pod
是一组容器,在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
11.container/image
比如类和对象.image是一个静态的随时可以运行的软件包, 包含运行应用程序所需的环境配置.
12.configMap
是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时pod可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
13.LimitRange
14.pv/pvc
15.macVlanIp