一、Kubernetes 相关概念

1. Kubernetes 是一个开源的容器集群管理系统,主要用来自动化部署容器 、自动扩展与收缩容器规模 、提供容器间的负载均衡
2. Node:Node(节点)也就是宿主机,宿主机可以是物理机 、云主机 、虚拟机等等,我们可以在一个宿主机上跑多个容器(container)
3. Pod:我们可以在一个宿主机上跑多个容器,为了高可用和负载均衡,我们把多个容器组成一个Pod,同一个Pod里的容器共享同一个网络命名空间,可以使用 localhost 互相通信;
    每个Pod里都有一个特殊的容器(Pause),这个容器提供网络栈和数据卷,其他普通容器共享这个容器的资源,因此同一个Pod内容器之间的通信和数据交换更为高效
4. Service:多个功能相同的Pod组成一个Service(微服务),Kubernetes 集群是由多个 Service 组成的,我们可以通过 ip:port 的形式来访问Service;
    多个功能相同的Pod,我们要怎么区分呢?我们会给每个Pod打一个Label(标签),Service 通过 Label 来找到指定的Pod
5. Kubernetes Master:在一个Kubernetes集群里面,会有多个Node节点,而 Kubernetes Master 这个节点作为主节点,用来管理其他的Node节点,包括资源管理 、Pod调度 、弹性伸缩 、安全控制 、系统监控 、纠错等功能;
    Kubernetes Master 上运行的 Replication Controller(RC)就是用来控制弹性伸缩的,通过控制Pod的数量来实现。

二、Kubernetes 实例

1. 这里通过一个小例子,更好地理解 Kubernetes 相关术语之间的关系
2. 首先创建一个 MySQL Service,然后创建一个 Web Service,最后用 Web Service 去连接 MySQL Service
3. 环境:一台 CentOS 7.5 机器(如果低于7.5需要 yum update 一下)、内存 3G 或以上

① 关闭 firewalld 和 selinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

② 安装 etcd 和 kubernetes,etcd 是用来存储Kubernetes集群里的配置文件的

[root@localhost ~]# yum install -y etcd kubernetes

③ 修改配置文件

[root@localhost ~]# vim /etc/sysconfig/docker        # 将 --selinux-enabled 改为 --selinux-enabled=false --insecure-registry gcr.io
[root@localhost ~]# vim /etc/kubernetes/apiserver # 将 --admission_control 参数中的 ServiceAccount 删除

④ 其他准备工作

[root@localhost ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
[root@localhost ~]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem
[root@localhost ~]# vim /etc/docker/daemon.json   # 配置加速器
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

⑤ 按顺序启动所有服务

for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy
do
systemctl start $s
done

⑥ 创建一个 RC 文件,用来控制 MySQL 的 Pod 数量

[root@localhost ~]# vim mysql-rc.yaml
apiVersion: v1
kind: ReplicationController # RC(副本控制器)
metadata:
name: mysql # RC的名字
spec:
replicas: 1 # 控制Pod的数量为1
selector:
app: mysql
template:
metadata:
labels:
app: mysql # 定义Pod的标签,以便Service能够找到Pod
spec:
containers: # 定义Pod里的容器
- name: mysql
image: mysql:5.6
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: ""
[root@localhost ~]# kubectl create -f mysql-rc.yaml    # 根据RC文件来创建一个RC
[root@localhost ~]# kubectl get rc # 查看是否创建了RC
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 1m
[root@localhost ~]# kubectl get pod    # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
NAME READY STATUS RESTARTS AGE
mysql-dr556 0/1 Running 0 3m

⑥ 创建一个 MySQL Service

[root@localhost ~]# vim mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
[root@localhost ~]# kubectl create -f mysql-service.yaml        # 创建 MySQL Service
[root@localhost ~]# kubectl get service # 查看是否创建了 MySQL Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 19m
mysql 10.254.211.198 <none> 3306/TCP 8s
[root@localhost ~]# mysql -uroot -p123456 -h10.254.211.198    # 创建完 MySQL Service,我们就可以使用 ip:port 的方式来访问了
Welcome to the MariaDB monitor. Commands end with ; or \g. # 如果没有mysql命令,可以通过 yum install -y mysql 来安装
Your MySQL connection id is 1
Server version: 5.6.42 MySQL Community Server (GPL) MySQL [(none)]>

⑦ 创建一个 RC 文件,用来控制 Web 的 Pod 数量,并制定去连接 MySQL Service

[root@localhost ~]# vim web-rc.yaml
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 1
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: '10.254.211.198' # 这里的IP需要通过 kubectl get service 查看 mysql 的 cluster ip
- name: MYSQL_SERVICE_PORT
value: ''
[root@localhost ~]# kubectl create -f web-rc.yaml    # 根据RC文件来创建一个RC
[root@localhost ~]# kubectl get rc # 查看是否创建了RC
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 19m
myweb 1 1 0 46s
[root@localhost ~]# kubectl get pod    # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
NAME READY STATUS RESTARTS AGE
mysql-dr556 1/1 Running 0 19m
myweb-5tlwc 0/1 Running 0 55s

⑦ 创建 Web Service

[root@localhost ~]# vim web-service.yaml
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
[root@localhost ~]# kubectl create -f web-service.yaml    # 创建 Web Service
[root@localhost ~]# kubectl get service # 查看是否创建了 Web Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 35m
mysql 10.254.211.198 <none> 3306/TCP 16m
myweb 10.254.103.27 <nodes> 8080:30001/TCP 6s

⑧ 测试

[root@localhost ~]# iptables -P FORWARD ACCEPT

Kubernetes 简介的更多相关文章

  1. 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践

    Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...

  2. 1、kubernetes简介

    Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...

  3. 001.Kubernetes简介

    一 Kubernetes概述 Kubernetes是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker ...

  4. k8s学习笔记之一:kubernetes简介

    一.虚拟化技术 1.什么是虚拟化技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...

  5. Kubernetes简介

    Kubernetes is an open-source platform designed to automate deploying, scaling, and operating applica ...

  6. kubernetes 简介:kube-dns 和服务发现

    服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一 ...

  7. 【Kubernetes学习之一】Kubernetes 简介

    环境 centos 7 一.概念和组件Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理,简称k8s. 1.Master Kubernetes中的 ...

  8. K8S - 容器编排工具Kubernetes简介

    1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...

  9. Kubernetes简介二

    Kubernetes是什么?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.通过Kubernetes你可以: 快速部署应用 快速扩展应用 ...

随机推荐

  1. 解决java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s content

    A界面中有viewpager的动态加载,从界面A跳到界面B,再finish掉B返回A时报出此异常. java.lang.IllegalStateException: The application's ...

  2. HashMap的最大容量为什么是2的30次方?

    今天看HashMap的底层实现,发现HashMap的最大容量规定为: // 最大容量(必须是2的幂且小于2的30次方,传入容量过大将被这个值替换) static final int MAXIMUM_C ...

  3. Unity -----一些可能存在的错误

    关于Unity中的资源管理,你可能遇到这些问题 张鑫 8 个月前 原文链接:关于Unity中的资源管理,你可能遇到这些问题 - Blog 在优化Unity项目时,对资源的管理可谓是个系统纷繁的大工程. ...

  4. CI框架 -- 核心文件 之 Hooks.php

    钩子 - 扩展框架核心 CodeIgniter 的钩子特性提供了一种方法来修改框架的内部运作流程,而无需修改 核心文件.CodeIgniter 的运行遵循着一个特定的流程,你可以参考这个页面的 应用程 ...

  5. Linux系统教程:设置GRUB菜单密码

    1.认识启动配置选项 [root@server5 ~]# cat /boot/grub/grub.conf     # grub.conf generated by anaconda # # Note ...

  6. Linux环境下Redis安装配置步骤[转]

    在LInux下安装Redis的步骤如下: 1.首先下载一个Redis安装包,官网下载地址为:https://redis.io/ 2.在Linux下解压redis: tar -zxvf redis-2. ...

  7. u3d外部资源 打包与加载的问题

    被坑了一下午,调bug,u3d外部加载资源一会可以,一会不行,始终找不到问题,最后快下班的时候,重新试了一下,原来是资源打包之前的文件名,和之后的加载资源名必须一样 [MenuItem("C ...

  8. spark 非常好的学习内容

    http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html

  9. SharePoint 2013 Deploy Master Page And Page Layout

    2013年9月27日的一篇随笔,其实也是自己编写的部署文档,由于客户是HK的,所以描述部分是用英文. 涉及到的内容是关于SharePoint 2013如何部署自定义的母版页和布局页. First, L ...

  10. C++输入cin,输出cout,换行endl,getline连续读取字符

    简记:cin=键盘,cout=屏幕. >>和<<指向代表数据流动方向.<<是流插入运算符,右操作数(运算符右边的值)会被插入到输出流中. 首先要包含:#includ ...