简介
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
一、Kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
1、Kubernetes节点
把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。
Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Heapster提供资源监控
- Dashboard提供GUI
- Federation提供跨可用区的集群
- Fluentd-elasticsearch提供集群日志采集、存储与查询
2、分层架构
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、集群自身的配置和管理等
3、kubelet
kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。
二、Kubernetes的安装
A、准备工作:
0、之前安装过k8s的机器大扫除脚本:
#!/bin/bash
docker rm -f $(docker ps -qa)
rm -rf /var/etcd/
for m in $(tac /proc/mounts | awk '{print $2}' | grep /var/lib/kubelet); do
umount $m || true
done
rm -rf /var/lib/kubelet/
for m in $(tac /proc/mounts | awk '{print $2}' | grep /var/lib/rancher); do
umount $m || true
done
rm -rf /var/lib/rancher/
rm -rf /run/kubernetes/
docker volume rm $(docker volume ls -q)
docker ps -a
docker volume ls
1、安装docker:
# 安装 docker 17.03.x-ce
curl https://releases.rancher.com/install-docker/17.03.sh | sh
2、设置集群上所有主机的hosts文件
root@kubernetes-master:~# cat /etc/hosts
127.0.0.1 localhost
# 可选修改项
127.0.1.1 kubernetes-master
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 集群节点
10.221.165.30 kubernetes-master
10.221.165.36 kubernetes-node-1
10.221.165.35 kubernetes-node-2
10.221.165.42 kubernetes-node-3
3、修改hostname 主机名(必须不同!Rancher Server和各Node主机名都不能重复)
root@kubernetes-node-1:~# cat /etc/hostname
kubernetes-node-1
4、设置node节点主机的daemon.sh文件,解决下面常见问题一
root@kubernetes-node-1:~# cat /etc/docker/daemon.json
{
"graph": "/mnt/docker-data",
"storage-driver": "overlay",
# 添加dns设置,解决添加node节点主机出错问题
"dns": ["8.8.8.8", "8.8.4.4", "当前主机ip"]
}
5、关闭防火墙(所有机器 ):
root@kubernetes-node-1:~# systemctl disable ufw
root@kubernetes-node-1:~# systemctl status ufw
● ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; disabled; vendor preset: enabled)
Active: inactive (dead)
B、正式安装:
1、在master上启动Rancher Server
root@kubernetes-master:~# sudo docker run -d --restart=unless-stopped \
-e DEFAULT_CATTLE_CATALOG_URL='{"catalogs":{"community":{"url":"https://github.com/rancher/community-catalog.git","branch":"master"},"library":{"url":"https://github.com/niusmallnan/rancher-catalog.git","branch":"k8s-cn"}}}' \
--name rancher-server \
-p 8080:8080 rancher/server:stable
2、设置Rancher
-
通过浏览器访问http://master:8080/,就进入了Rancher的web页面。
-
使用k8s的编排引擎,Rancher默认的编排引擎是Cattle,所以需要先创建一个k8s环境。将鼠标放到主页左上角的Default菜单上,会自动显示下拉菜单,点选“环境管理”,然后点选“添加环境”。在添加环境页面上,填入名称(这里我们填入k8s)和描述(这里我们没有填写),在下面的环境模板中选择Kubernetes,然后点击创建,便添加了一个名为k8s的新环境。
-
之后请耐心等待,如果是第一次进行添加主机操作的话,系统会到互联网上拉取相关的镜像,这需要一段时间。整个环境都部署完成后,页面会出现Kubernetes UI的按钮。
-
这时候整个k8s的环境便通过Rancher部署好了,点击Kubernetes UI的按钮,来看看其仪表板。
kubernetes仪表板
常见问题:
1、添加节点主机失败
使用docker logs -f containerId
查看日志。
2、K8S仪表板Service unavailable故障的解决办法:
参考:https://blog.csdn.net/CSDN_duomaomao/article/details/78475605?utm_source=blogxgwz0
网友评论