在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。就在这个时候,K8S 出现了。K8S,就是基于容器的集群管理平台,它的全称,是 Kubernetes。 本次主题将会为你分享:
kubernetes 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 集群(Cluster)。这个集群主要包括两个部分:
一个 Master 节点(主节点)一群 Node 节点(计算节点)
一看就明白:Master 节点主要还是负责管理和控制。Node 节点是工作负载节点,里面是具体的容器。
相比虚拟机和容器
容器编排调度引擎 —— k8s 的好处
主节点,承载 k8s 的控制和管理整个集群系统的控制面板工作节点,运行用户实际的应用
pod 相当与逻辑主机,每个 pod 都有自己的 IP 地址pod 内的容器共享相同的 IP 和端口空间默认情况下,每个容器的文件系统与其他容器完全隔离
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署:
# 创建一个 Master 节点$ kubeadm init# 将一个 Node 节点加入到当前集群中$ kubeadm join
在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:
关闭防火墙:$ 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
Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 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
$ 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
由于版本更新频繁,这里指定版本号部署:
$ yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0$ systemctl enable kubelet
在 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
$ kubectl apply -fhttps://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml确保能够访问到 quay.io 这个 registery。如果下载失败,可以改成这个镜像地址:lizhenliang/flflannel:v0.11.0-amd64
在 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
在 Kubernetes 集群中创建一个 pod,验证是否正常运行:
$ kubectl create deployment nginx --image=nginx$ kubectl expose deployment nginx --port=80 --type=NodePort$ kubectl get pod,svc访问地址:http://NodeIP:Port
$ 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 专享技术内容哦。