Linux企业运维##Kubernetes(一)k8s集群安装部署
目录一、Kubernetes简介1.什么是Kubernetes2.Kubernetes设计架构二、k8s安装部署1.环境准备2.安装部署一、Kubernetes简介1.什么是KubernetesKubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。它旨在提供“跨主机集群的
目录
一、Kubernetes简介
1.什么是Kubernetes
Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
Kubernetes的好处:
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
- 服务高可用、高可靠。
- 可将负载运行在由成千上万的机器联合而成的集群中。
2.Kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
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:提供集群日志采集、存储与查询
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构:
- 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴—— (1)Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等 (2)Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
二、k8s安装部署
1.环境准备
(1)关闭所有节点的selinux和iptables防火墙,所有节点部署docker引擎。
清理所有服务器之前的docker实验产物,保证实验环境崭新
(2)test2、3、4离开swarm集群,清空machine的配置,重新加载配置文件,重新启动docker
(3)test2、3、4关闭swap分区,注释掉/etc/fstab文件里swap分区的部分
(4)test2将Docker使用的Cgroup Driver改为systemd,因为systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups, 但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器, 当资源有压力的情况时,有可能出现不稳定的情况
将修改好的相同的配置发送给test3和test4
test2、3、4重新启动docker
(5)test2中创建k8s的源配置文件并编辑
将test2上的k8s.repo发送给test3和test4
2.安装部署
(1)test2、3、4安装kubelet kubeadm kubectl
(2)都启动kubelet并设置开机自启
(3)拉取7个k8s相关镜像并上传到harbor仓库中(test1作为仓库)
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
登陆harbor仓库
在harbor仓库中创建k8s项目,访问级别为公开
标记本地镜像并上传
docker images | grep registry | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}'
docker images | grep k8s | awk '{system("docker push "$1":"$2"")}'
查看harbor仓库中k8s项目下的镜像
上传成功
注意:k8s管理端的虚拟机分配的cpu至少要为2
(4)初始化k8s集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s
配置k8s的环境变量,这里图中程序提示的命令我们直接复制下来执行
export KUBECONFIG=/etc/kubernetes/admin.conf
并将该命令写入 ~/.bash_profile中,这样就无需每次手动输入
(5)输入kubectl get pod -n kube-system
获取指定名称空间的pod信息,可以看到有两个没有就绪,这是因为没有安装flannel网络组件
kubectl get pod -n kube-system
(6)下载kube-flannel.yml
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
打开kube-flannel.yml文件,查看所需的镜像为rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 和 rancher/mirrored-flannelcni-flannel:v0.16.1
故在harbor仓库中创建rancher项目
(7)test1中拉取flannel镜像,更改flannel镜像标签并将其上传至harbor仓库
更改flannel镜像标签并上传
docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
docker tag rancher/mirrored-flannelcni-flannel:v0.16.1 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
可以在web管理页面看到上传的flannel镜像
(8)在 ~/.bashrc
中添加如下配置后,使用tab键就可以补齐kubectl的调用命令
echo "source <(kubectl completion bash)" >> ~/.bashrc
(9)test2现在启动flannel组件,查看pod信息,可以看到刚才的两个没有就绪的pod已经就绪了
kubectl apply -f kube-flannel.yml
kubectl get pod -n kube-system
(10)将test3,4加入test2部署好的k8s集群中
输入kubectl get nodes
获取节点和服务版本信息
kubectl get node
可看到此时仅有test2一个节点
在之前初始化时我们还需要保存下图选中的命令,这个命令可以让其他节点加入到test2部署好的k8s集群里
在test3和test4中使用该命令,加入到k8s集群中
再次在test2中使用命令kubectl get nodes
,可看到test3,test4已加入集群中
更多推荐
所有评论(0)