一、云计算简介

1、虚拟化技术与云计算的联系

云计算概念:

  • 云计算是一种将网络、存储、硬件、软件整合在一起的技术,它强调的是资源池这一概念,而且资源池可以动态的无限扩容、缩容,最终让租户去租用这些资源。
  • 云计算最终是为租户提供服务,租户可以根据自身需求,去进行资源池的申请,提供资源池的平台称为云平台。

虚拟化概念:

  • 虚拟化技术将物理资源转变成逻辑上可管理的资源,以打破物理资源结构壁垒,让虚拟机中的服务运行在虚拟的基础上,而不是直接运行在物理资源上。

联系:虚拟化技术是云计算中的一个模块,而且是不可或缺的模块。云计算提供的是大量各种资源池,虚拟化技术便是合理分配这些资源池的资源给虚拟机。然后再把虚拟机按照不同的配置以不同的价格出售给各个中小企业租户进行租用。

2、云计算的分类

(1)以服务类型分类

  • IaaS(Infrastructure as a Server)
  • PaaS(Platform as a Server)
  • SaaS(Software as a Server)
    在这里插入图片描述图形解析:
  • 没有云计算时,我们需要做的是最左边绿色部分(即所有事)
  • 当我们引入IaaS,下面棕色部分的东西就交给了云平台,上面绿色部分自己处理(即提供诸如网络、存储等硬件设施)
  • 当我们引入PaaS,由图可知,我们只用自己部署软件服务。
  • 当我们引入SaaS,我们可以使用云提供者开发的软件,这些软件一般来说都是对现有开源,免费软件进行了二次开发的,具有更高的性能,更强大的支持和优化。像SaaS,我们基本上只用提供网站代码即可。其他维护什么都不用自己干。

更形象的说明请见博客: https://blog.csdn.net/weixin_44571270/article/details/89737883

(2)以服务对象分类

  • 公有云
  • 私有云
  • 混合云
3、Kubernetes入门

1、Kubernetes是干什么的?
Kubernetes又称k8s,因其中间有8个字母而命名。它是一个自动化容器管理平台。天生就是为管理docker容器而诞生的。使用Kubernetes可以实现如下功能:

  • 自动化容器的部署和复制;
  • 随时扩展或收缩容器规模;
  • 将容器组织成组,并且提供容器间的负载均衡;
  • 很容易地升级应用程序容器的新版本;
  • 提供容器弹性,如果容器失效就替换它等。

2、Kubernetes平台组件
Kubernetes集群中主要存在两种类型的节点:master、minion节点,Minion节点为运行 Docker容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能。master主要是管理大量的分布式的minion节点。

master节点上的服务:

  • Apiserver:用户和 kubernetes 集群交互的入口,封装了核心对象的增删改查操作,提供了 RESTFul 风格的API 接口,通过etcd来实现持久化并维护对象的一致性。
  • Scheduler:负责集群资源的调度和管理,例如当有 pod 异常退出需要重新分配机器时,scheduler通过一定的调度算法从而找到最合适的节点。
  • Controller-manager:主要是用于保证 replication Controller 定义的复制数量和实际运行的pod 数量一致,另外还保证了从 service 到 pod 的映射关系总是最新的。

minion节点上的服务:

  • Kubelet:运行在 minion节点,负责和节点上的Docker交互,例如启停容器,监控运行状态等。
  • Proxy:运行在 minion 节点,负责为 pod 提供代理功能,会定期从 etcd 获取 service 信息,并根据service 信息通过修改 iptables来实现流量转发(最初的版本是直接通过程序提供转发功能,效率较低。),将流量转发到要访问的 pod 所在的节点上去。

核心附件:

  • Etcd:etcd 是一个分布式一致性k-v存储系统数据库,可用于服务注册发现与共享配置储数据库,用来存储kubernetes的信息的,etcd组件作为一个高可用、强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,etcd的诞生就是为解决该问题。
  • Flannel:Flannel是CoreOS 团队针对 Kubernetes 设计的一个覆盖网(Overlay
    Network)工具,Flannel 目的就是为集群中的所有节点重新规划 IP地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP通信。

二、Kubernetes云平台搭建

一般企业中,会有多个master节点,一般会做高可用,然后会有etcd分布式集群。但在我们学习技术时,便不需要这么复杂。最简单的架构体系,至少也需要两台或三台物理服务器。

搭建环境

在这里插入图片描述我这里采用了两台物理机。201为k8s master节点,200当minion节点,etcd做一台即可。在master节点上共用一台物理服务器。

搭建流程
1、安装前奏
#两个服务器都要执行以下命令:
setenforce 0
或者 sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
systemctl stop firewalld

#ntp时间同步,master节点和million节点需要时间一致
yum install ntp -y
ntpdate pool.ntp.org
systemctl start ntpd
2、Master节点安装
yum install kubernetes-master etcd -y
3、配置etcd
vim /etc/etcd/etcd.conf

在这里插入图片描述
注:2380端口是etcd服务器和etcd服务器之间通信的端口,又称分布式集群通信端口。
2379端口是提供HTTP AP服务,即通过该端口给client提供服务,这里是给master和minion节点提供服务的端口。
27.0.0.1:2379是为了本地执行etcd命令连接,172.16.193.201:2379是为了远程连接。

mkdir -pv /data/etcd
chown -R etcd.etcd /data/etcd
4、配置k8s
cd /etc/kubernetes/
ll

在这里插入图片描述
k8s安装完产生三个服务:

  • apiserver:统一命令(操作)入口
    在这里插入图片描述
  • controller-manager:容器如果失效,会马上创建一个新容器,保证容器总数不变
  • scheduler:调度控制器,发现那个容器资源满了,会自动调度到其他容器。

再修改k8s config配置:
在这里插入图片描述启动三个服务:
在这里插入图片描述

5、minion节点安装
yum install kubernetes-node docker *rhsm* -y
6、配置k8s

k8s minion节点安装完产生两个服务:

  • kubelet:用与docker交互,发布命令、任务。也即是以后就不用docker run、docker ps等等了。就可以使用kubelet这个了。还可以在web界面创建运行容器。

在这里插入图片描述

  • proxy:SNAT、DNAT就是在这里做的。实现流量转发,具体过程目前还不清楚!

编辑k8s minion配置文件:

vim config

在这里插入图片描述启动两个服务:
在这里插入图片描述

7、master端查看minion节点

查看:
在这里插入图片描述删除minion节点:
在这里插入图片描述增添minion节点:
只能重启k8s minion节点上的两个服务。

8、安装flannel

注:这个服务是为了给docker容器统一分配ip。

#这个flannel所有节点都要安装,无论master还是minion。
yum install flannel -y
vim /etc/sysconfig/flanneld

在这里插入图片描述

etcdctl mk /atomic.io/network/config '{"network":"172.17.0.0/16"}'
#             这个是key                     这个是value
systemctl start flanneld

安装了flannel服务的宿主机:
在这里插入图片描述
docker容器:
在这里插入图片描述

三、搭建k8s Dashboard UI界面

1、master节点要做的操作
(1)创建Dashboard-controller.yaml、Dashborad-service.yaml文件
touch Dashboard-controller.yaml

将下面内容写入文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
    spec:
      containers:
      - name: kubernetes-dashboard
        image: bestwu/kubernetes-dashboard-amd64:v1.6.3
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        args:
          - --apiserver-host=http://172.16.193.201:8080 #此处需要修改ip
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

touch Dashboard-service.yaml

将下面内容写入文件:

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090
(2)修改apiserver配置文件

注:如果不去掉其中的ServiceAccount参数,api会拒绝访问UI界面。

#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

如果你是最后才发现做这一步的话。你需要修改后,重启apiserver,然后执行:

kubectl delete -f Dashboard-controller.yaml
kubectl delete -f Dashboard-service.yaml
2、minion节点上做的操作(此步骤可省略不要)

注:这一步可不要,在下一步会自己下载镜像。了解下为啥改名就行了,k8s版本和dashboard版本不能相差太大,所以不建议自己docker pull镜像!

下载pod-infrastructure、kubernetes-dashboard镜像:

docker pull docker.io/tianyebj/pod-infrastructure
docker pull docker.io/mirrorgooglecontainers/kubernetes-dashboard-amd64

#这个改名是因为Dashboard-controller.yaml文件中调用过这个镜像
docker tag docker.io/siriuszg/kubernetes-dashboard-amd64 bestwu/kubernetes-dashboard-amd64:v1.6.3

#这个改名是因为minion节点中的/etc/kubernetes/kubelet文件中调用过它
docker tag docker.io/tianyebj/pod-infrastructure registry.access.redhat.com/rhel7/pod-infrastructure
3、创建并运行镜像
kubectl create -f Dashboard-controller.yaml
kubectl create -f Dashboard-service.yaml
iptables -P FORWARD ACCEPT (全部节点都要配置)

报错:error: yaml: line 38: did not find expected key
这个错误害得我整了很久很久。
解决方法这两个文件中有空格没有打对。格式不对。重新复制以下。.json格式的文件严格要求格式,空格不能多一个,也不能少一个。

4、访问k8s UI界面

查看是否成功生成dashboard界面:

kubectl get pods -namespace kube-system

这个是失败:
在这里插入图片描述
出现错误,可以看日志:

kubectl logs kubernetes-dashboard-3584070908-vp0gl -n kube-system

这个是成功:
在这里插入图片描述在这里插入图片描述在这里插入图片描述成功!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐