Kubernetes K8S 基于 Docker 安装部署

在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。就在这个时候,K8S 出现了。K8S,就是基于容器的集群管理平台,它的全称,是 Kubernetes。 本次主题将会为你分享:

  1. K8S 起源
  2. K8S 集群
  3. 为什么需要 K8A
  4. K8A 的集群架构
  5. POD:K8S 调度的最小单元
  6. 快速部署 Kubernetes 集群

kubernetes K8S,就是基于容器的集群管理平台

一. K8S 起源

在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。就在这个时候,K8S 出现了。K8S,就是基于容器的集群管理平台,它的全称,是 kubernetes。

Kubernetes K8S 基于 Docker 安装部署_第1张图片

Kubernetes 这个单词来自于希腊语,含义是舵手或领航员。

K8S 是它的缩写,用“8”字替代了“ubernete”这 8 个字符。和 Docker 不同,K8S 的创造者,是众人皆知的行业巨头——Google。然而,K8S 并不是一件全新的发明。它的前身,是 Google 自己捣鼓了十多年的 Borg 系统。K8S 是 2014 年 6 月由 Google 公司正式公布出来并宣布开源的。同年 7 月,微软、Red Hat、IBM、Docker、CoreOS、Mesosphere 和 Saltstack 等公司,相继加入K8S。之后的一年内,VMware、HP、Intel 等公司,也陆续加入。2015 年 7 月,Google 正式加入 OpenStack 基金会。与此同时,Kuberentes v1.0 正式发布。目前,kubernetes 的版本已经发展到 V1.13。

二. K8S 集群

K8S 的架构,略微有一点复杂,我们简单来看一下。一个 K8S 系统,通常称为一个 K8S 集群(Cluster)。这个集群主要包括两个部分:

一个 Master 节点(主节点)一群 Node 节点(计算节点)

Kubernetes K8S 基于 Docker 安装部署_第2张图片

一看就明白:Master 节点主要还是负责管理和控制。Node 节点是工作负载节点,里面是具体的容器。

三. 为什么需要 k8s?

1. 应用部署模式的演进

Kubernetes K8S 基于 Docker 安装部署_第3张图片虚拟化模式

Kubernetes K8S 基于 Docker 安装部署_第4张图片容器化模式

相比虚拟机和容器

  • 容器更加轻量级,启动更快(秒级)
  • 容器可移植性更好

2. 管理大量的容器带来了新的挑战

容器编排调度引擎 —— k8s 的好处

  • 简化应用部署
  • 提高硬件资源利用率
  • 健康检查和自修复
  • 自动扩容缩容
  • 服务发现和负载均衡

四. k8s 的集群架构

主节点,承载 k8s 的控制和管理整个集群系统的控制面板工作节点,运行用户实际的应用

Kubernetes K8S 基于 Docker 安装部署_第5张图片k8s 集群组件

五. pod —— k8s 调度的最小单元

1. 一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点

Kubernetes K8S 基于 Docker 安装部署_第6张图片pod 不会跨越工作节点

2. 了解 pod

pod 相当与逻辑主机,每个 pod 都有自己的 IP 地址pod 内的容器共享相同的 IP 和端口空间默认情况下,每个容器的文件系统与其他容器完全隔离

六. 快速部署 kubernetes 集群

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署:

# 创建一个 Master 节点$ kubeadm init# 将一个 Node 节点加入到当前集群中$ kubeadm join 

1. 安装要求

在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:

  1. · 一台或多台机器,操作系统 CentOS7.x-86_x64 ·
  2. 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多 ·
  3. 集群中所有机器之间网络互通 · 可以访问外网,需要拉取镜像
  4. 禁止 swap 分区

2. 学习目标

  1. 在所有节点上安装 Docker 和 kubeadm
  2. 部署 Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  5. 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

3. 准备环境

关闭防火墙:$ systemctl stop firewalld$ systemctl disable firewalld关闭 selinux:$ sed -i 's/enforcing/disabled/' /etc/selinux/config$ setenforce 0关闭 swap:$ swapoff -a $ 临时$ vim /etc/fstab $ 永久添加主机名与 IP 对应关系(记得设置主机名):$ cat /etc/hosts192.168.23.35 k8s-master192.168.23.36 k8s-node1192.168.23.37 k8s-node2将桥接的 IPv4 流量传递到 iptables 的链:$ cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF$ sysctl --system

4.所有节点安置 Docker/kubeadm/kubelet

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

5. 安装 Docker

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo$ yum -y install docker-ce-18.06.1.ce-3.el7$ systemctl enable docker && systemctl start docker$ docker --versionDocker version 18.06.1-ce, build e68fc7a

6、添加阿里云 YUM 软体源

$ cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF

7. 安装 kubeadm,kubelet 和 kubectl

由于版本更新频繁,这里指定版本号部署:

$ yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0$ systemctl enable kubelet

8.部门 Kubernetes Master

在 192.168.31.61(Master)执行 $ kubeadm init \--apiserver-advertise-address=192.168.31.61 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.15.0 \--service-cidr=10.1.0.0/16 \--pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

使用 kubectl 工具:

mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config$ kubectl get nodes

9. 安装 Pod 网络插件(CNI)

$ kubectl apply -fhttps://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml确保能够访问到 quay.io 这个 registery。如果下载失败,可以改成这个镜像地址:lizhenliang/flflannel:v0.11.0-amd64 

10 .加入 Kubernetes Node

在 192.168.31.62/63(Node)执行。向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:

$ kubeadm join 192.168.23.35:6443 --token esce21.q6hetwm8si29qxwn \--discovery-token-ca-cert-hashsha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

11. 测试 kubernetes 集群

在 Kubernetes 集群中创建一个 pod,验证是否正常运行:

$ kubectl create deployment nginx --image=nginx$ kubectl expose deployment nginx --port=80 --type=NodePort$ kubectl get pod,svc访问地址:http://NodeIP:Port

12. 部署 Dashboar

$ kubectl apply -fhttps://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

默认镜像国内无法访问,修改镜像地址为: lizhenliang/kubernetes-dashboard-amd64:v1.10.1默认 Dashboard 只能集群内部访问,修改 Service 为 NodePort 类型,暴露到外部:

kind: ServiceapiVersion: v1metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-systemspec:type: NodePortports:- port: 443targetPort: 8443nodePort: 30001selector:k8s-app: kubernetes-dashboard$ kubectl apply -f kubernetes-dashboard.yaml 访问地址:http://NodeIP:30001

创建 service account 并绑定默认 cluster-admin 管理员集群角色:

$ kubectl create serviceaccount dashboard-admin -n kube-system$ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin--serviceaccount=kube-system:dashboard-admin$ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret |awk '/dashboard-admin/{print $1}')

使用输出的 token 登录 Dashboard。

阅读全文: http://gitbook.cn/gitchat/activity/5e8dd4d766be605c4dfe0253

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

你可能感兴趣的:(Kubernetes K8S 基于 Docker 安装部署)