k8s-1:k8s简介及安装部署
文章目录1. Kubernetes介绍1.1 简介1.2 功能1.3 设计架构2. 安装部署2.1 所有节点配置2.1 master节点配置2.2 node节点配置1. Kubernetes介绍官网:https://kubernetes.io/zh/docs/1.1 简介在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器
1. Kubernetes介绍
官网:https://kubernetes.io/zh/docs/
1.1 简介
- 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
- Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
- Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
Kubernetes的好处
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
- 服务高可用、高可靠。
- 可将负载运行在由成千上万的机器联合而成的集群中。
1.2 功能
- 服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
- 存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
- 自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
- 自动完成装箱计算
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
- 自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
- 密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥
1.3 设计架构
一个 Kubernetes 集群包含 集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点。
核心组件
- etcd:保存了整个集群的状态;
- 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:提供集群日志采集、存储与查询
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示
- 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
- Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
2. 安装部署
2.1 所有节点配置
- 各主机selinux和火墙均为关闭状态
- 所有节点上安装 Docker-ce 并开启:docker-ce安装教程
- 设置 Docker daemon
{
"registry-mirrors": ["https://zy.westos.org"],
#指向私有仓库,无则不写
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
重启docker(直到docker info查看到Cgroup Driver状态为 systemd)
systemctl daemon-reload
systemctl restart docker
禁用swap
swapoff -a
vim /etc/fstab
:注释swap
2.1 master节点配置
1.安装
此步骤在所有主机上均执行
配置yum源:
#/etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
安装:
yum install -y kubelet kubeadm kubectl
开启服务:
systemctl enable --now kubelet.service
2.拉取镜像进行初始化
查看默认配置:
kubeadm config print init-defaults
列出所需镜像:
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
拉取镜像:
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
执行初始化提示结果:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
注:在此可以直接用超户做,免去第三步给予权限
3.执行后k8s命令自动补齐
echo "source <(kubectl completion bash)" >> ~/.bashrc
4.安装网络组件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
若网速不行就下载kube-flannelyml文件,本地导入
kubectl apply -f kube-flannel.yml
在node节点加入后可以查看到:
kubectl get nodes
2.2 node节点配置
在master端导出node节点所需镜像并导入node节点
保存镜像到tar包
docker save quay.io/coreos/flannel:v0.12.0-amd64 registry.aliyuncs.com/google_containers/pause:3.2 registry.aliyuncs.com/google_containers/coredns:1.7.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 > node.tar
在除了master的其他server端导入镜像
docker load -i node.tar
加入集群(执行master端初始化的输出结果)
kubeadm join 192.168.17.2:6443 --token fcx6e4.fe3nuzytxvbo8fhk \
--discovery-token-ca-cert-hash sha256:8643fefebfcba78f653e38ccc1e09038561cf8c89cf6622f59153909c504adde
更多推荐
所有评论(0)