参考: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='^.*' &
然后再输入

http://139.xxx.xx.141:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/overview?namespace=default

这里的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

2.https://blog.csdn.net/zhangjunli/article/details/97625136

3.https://blog.51cto.com/bestlope/2147197

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐