首页 > 编程知识 正文

Kubernetes K8S 基于 Docker 安装部署,k8s安装部署

时间:2023-05-06 12:43:23 阅读:272221 作者:4557

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

K8S 起源K8S 集群为什么需要 K8AK8A 的集群架构POD:K8S 调度的最小单元快速部署 Kubernetes 集群

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

一. K8S 起源

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

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 节点(计算节点)

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

三. 为什么需要 k8s?1. 应用部署模式的演进

虚拟化模式

容器化模式

相比虚拟机和容器

容器更加轻量级,启动更快(秒级) 容器可移植性更好2. 管理大量的容器带来了新的挑战

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

简化应用部署 提高硬件资源利用率 健康检查和自修复 自动扩容缩容 服务发现和负载均衡四. k8s 的集群架构

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

k8s 集群组件

五. pod —— k8s 调度的最小单元1. 一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点

pod 不会跨越工作节点

2. 了解 pod

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

六. 快速部署 kubernetes 集群

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

# 创建一个 Master 节点$ kubeadm init# 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和端口 >1. 安装要求

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

· 一台或多台机器,操作系统 CentOS7.x-86_x64 ·硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多 · 集群中所有机器之间网络互通 · 可以访问外网,需要拉取镜像禁止 swap 分区2. 学习目标在所有节点上安装 Docker 和 kubeadm部署 Kubernetes Master部署容器网络插件部署 Kubernetes Node,将节点加入 Kubernetes 集群中部署 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 --system4.所有节点安置 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 e68fc7a6、添加阿里云 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.gpgEOF7. 安装 kubeadm,kubelet 和 kubectl

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

$ yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0$ systemctl enable kubelet8.部门 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 nodes9. 安装 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:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c511. 测试 kubernetes 集群

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

$ kubectl create deployment nginx --image=nginx$ kubectl expose deployment nginx --port=80 --type=NodePort$ kubectl get pod,svc访问地址:http://NodeIP:Port12. 部署 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 专享技术内容哦。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。