K8S原理、安装和部署
参考:Kubernetes中文文档一、K8S架构和原理首先看一下K8S的架构图,方便对组件有所了解Master主要有以下组件:apiserver: K8s的网关,提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制,;controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,类似于CRUD,不直接调度node节点,而是把指令给Apiserv
参考:Kubernetes中文文档、官网
一、K8S架构和原理
首先看一下K8S的架构图,方便对组件有所了解
Master主要有以下组件:
- apiserver: K8s的网关,提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制,;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,类似于CRUD,不直接调度node节点,而是把指令给Apiserver存储在etcd中;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- etcd保存了整个集群的状态,资源对象,服务的注册与发现;
Node节点主要有以下组件:
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现(监听所有pod)和负载均衡(通过 service VIP虚拟IP实现(一组pod服务对应一个虚拟ip))
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理,每个Node节点都存一份,会扫描ETCD上面的指令并完成Node上面的资源指令操作;
- Fluentd-elasticsearch提供集群日志采集、存储与查询
- Docker 容器引擎
K8s核心组件原理:
- POD K8S创建或部署的最小单位,K8S不直接管理容器,而且管理pod来间接管理容器,一个POD可以封装一个或者一组容器(一般是相关的服务,例如Nginx、Web服务和数据库)。每个Pod被分配一个独立的IP地址和主机名,相当于独立主机(通过绑定物理机ip和port转发数据包方式访问外网),pod创建容器之前先创建pause容器,Pod中的每个容器通过pause容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。
- ReplicaSet 副本控制器,控制副本数量与设定值一致。通过标签选择器selector单选或者复合选择(a=x&&b=y,而replicationcontroller只能单选一个条件)维护一组相关服务。
- Deployment 通常和replicaset一起使用进行滚动更新。滚动更新时,重新创建新的replicaset,删除旧的pod,但是旧的replicaset不会删除,用来回滚。
- Statefulset 通常用来部署有状态服务(deployment用来部署无状态服务),例如数据库等。statefulset保证pod重新创建之后(ip会变化),hostname不会发生变化,从而关联数据(PVC文件系统)。
二、K8s安装和部署
下面来安装一个单机版的k8s,官网提供了很多种部署方式,使用Minukube非常简单。
1.安装和启动docker
#如果有旧版本docker先删除了
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#设置仓库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#添加阿里云源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#开始安装
sudo yum install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
systemctl enable docker
2.安装kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
3.安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
sudo rpm -ivh minikube-latest.x86_64.rpm
4.启动
minikube start --driver=docker
如果遇到报错X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges. 说明不能用root用户运行,需要新增用户
useradd lbship
passwd lbship
su lbship
sudo usermod -aG docker $USER && newgrp docker
如果遇到报错二: X Exiting due to DRV_NOT_DETECTED: No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/ 可以设置docker为默认driver:
minikube config set driver docker
4.测试
minikube status
三、使用K8s
通过网页端访问
minikube dashboard
通过上面的网址就可以访问了,如果要用外部电脑访问,需要先暴露端口
kubectl proxy --port=8001 --address='10.xxx.xx.2' --accept-hosts='^.*' &
然后再输入
这里的10.xxx.xx.2 和139.xxx.xx.141 分别是我云主机的内外ip和外网ip
登录minikube虚拟机
minikube ssh
docker ps
可以看到docker ps列出的是kubernetes里的docker, 不是安装minikube的host的docker
参考:
1.https://www.kubernetes.org.cn/3096.html
更多推荐
所有评论(0)