0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【大神课堂】轻松加愉快的 Kubernetes 安装教程

马哥Linux运维 来源:未知 作者:steve 2018-06-02 10:39 次阅读

在国内安装 K8S,一直是大家很头痛的问题,各种麻烦,关键是还不知道需要下载什么工具。蛋疼。而且大部分国内教程要么太老,要么太挫。今天就来告诉大家如何在国内愉快的安装K8S。

安装环境

使用的是 kubeadm 进行安装,过程基本安装官方教程来的。

轻松加愉快的 Kubernetes 安装教程

虽然写的是阿里云 VPC,但是虚拟机也支持。影响不大。

轻松加愉快的 Kubernetes 安装教程

如果仅仅是本地安装玩一玩,都可以配置成1核1G。

接下来的过程,如果有翻墙主机的情况,按照流程走就可以,没有的话直接看下载好的结果就可以了。

安装过程

安装过程基本包括下载软件,下载镜像,主机配置,启动 Master 节点,配置网络,启动 Node 节点。

下载软件

这个步骤有能力的人可以直接按照步骤来,没有的话可以使用我打包好的1.6.2软件包。

首先在自己的主机配置K8S源。

cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgEOF

配置好后,下载软件包

yum install -y -downloadonly kubelet kubeadm kubectl kubernetes-cni

将下载好的所有 RPM 打包,发回到本地。这样就完成了K8S软件包的下载了。

下载好的 RPM:

https://pan.baidu.com/s/1clIpjCcp6h

下载镜像

下载镜像可以直接使用我提供的脚本,前提是要能连外网。我自己也已经下载过一份了。提供给大家使用。

#!/usr/bin/env bashimages=( kube-proxy-amd64:v1.6.2 kube-controller-manager-amd64:v1.6.2 kube-apiserver-amd64:v1.6.2 kube-scheduler-amd64:v1.6.2 kubernetes-dashboard-amd64:v1.6.0 k8s-dns-sidecar-amd64:1.14.1 k8s-dns-kube-dns-amd64:1.14.1 k8s-dns-dnsmasq-nanny-amd64:1.14.1 etcd-amd64:3.0.17 pause-amd64:3.0)for imageName in ${images[@]} ; do docker pull gcr.io/google_containers/$imageName docker tag gcr.io/google_containers/$imageName registry.cn-beijing.aliyuncs.com/bbt_k8s/$imageName docker push registry.cn-beijing.aliyuncs.com/bbt_k8s/$imageNamedonequay.io/coreos/flannel:v0.7.0-amd64docker tag quay.io/coreos/flannel:v0.7.0-amd64 registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64docker push registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64

关于这个脚本我解释一下。这个脚本是下载常用的镜像,然后回传到国内的源上,可以将registry.cn-beijing.aliyuncs.com/bbt_k8s改成你自己的地址,必须先用docker login 进行登录,否则可能会出现权限认证错误。推荐使用阿里云,网易的服务。如果使用自己的地址,请注意下面的配置,根据自己的情况进行修改,不在累赘了。

镜像版本号说明:

轻松加愉快的 Kubernetes 安装教程

OK,这些镜像下载完成就 OK 了,不会连外网的,就直接跳过吧。

主机配置

上面的内容下载好后,我们就可以安装了。

更新系统

没什么可以介绍的。

yum update -y

安装 Docker

K8S 的1.6.x 版本仅仅在 Docker 1.12上测试过,虽然最新版本 Docker 也可以运行,但是不推荐安装最新版本,免得遇到什么问题。

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh /dev/stdin 1.12.6

安装完成后,禁用 Docker 的更新,禁用方式为,在/etc/yum.conf添加

exclude=docker-engine*

配置 Docker

主要是配置一些加速器,避免自己下载镜像速度太慢。

修改/etc/docker/daemon.json 添加如下内容:

{ "registry-mirrors": ["https://自己的加速地址"]}

之后就是启动Docker 的服务,

systemctl daemon-reloadsystemctl enable dockersystemctl start docker

修改网络

主要是开启桥接相关支持,这个是 flannel 需要的配置,具体是否需要,看自己的网络组件选择的是什么。

修改/usr/lib/sysctl.d/00-system.conf,将net.bridge.bridge-nf-call-iptables改成1.之后修改当前内核状态

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

安装K8S包

上传RPM 包,到自己的服务器上,然后执行

yum install -y *.rpm

之后开启kubelet的开机启动

systemctl enable kubelet

然后配置 kubelet,修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf成如下文件

[Service]Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"Environment="KUBELET_ALIYUN_ARGS=--pod-infra-container-image=registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/pause-amd64:3.0"ExecStart=ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_ALIYUN_ARGS

在这里主要修正2个问题,一个是将 POD 的基础容器修改为我们自己源里面的,另外一个是最新版本的 K8S 的资源管理和 Docker 默认的资源管理方式有冲突,这里把这块给删除了。具体可以参考https://github.com/kubernetes/release/issues/306

然后重新 reload 服务。

systemctl daemon-reload

这样就完成了主机环境的初始化,如果是使用虚拟机,拷贝3份就可以了。如果是实体机,3台都按照这个步骤来一遍就好了。然后为每一台主机根据类型设置好 HostName,K8S会把 HostName 当做主机标识。

启动 Master

配置完主机后,我们就可以启动我们的 Master 节点了,通常 Master 节点推荐2-3个,本地测试我们就简单一些,一个节点就可以了。

export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s"export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17"kubeadm init --kubernetes-version=v1.6.2 --pod-network-cidr=10.96.0.0/12

前面2个环境变量配置,是让kubeadm 初始化的时候,使用我们的镜像源下载镜像。

最后 kubeadm init 是初始化 Master 节点。其中需要配置的参数我说明一下。

轻松加愉快的 Kubernetes 安装教程

执行完毕后,稍等一阵,就完成了。

kubeadm init --kubernetes-version=v1.6.2 --pod-network-cidr=10.96.0.0/12[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.[init] Using Kubernetes version: v1.6.2[init] Using Authorization mode: RBAC[preflight] Running pre-flight checks[preflight] Starting the kubelet service[certificates] Generated CA certificate and key.[certificates] Generated API server certificate and key.[certificates] API Server serving cert is signed for DNS names [node0 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.61.41][certificates] Generated API server kubelet client certificate and key.[certificates] Generated service account token signing key and public key.[certificates] Generated front-proxy CA certificate and key.[certificates] Generated front-proxy client certificate and key.[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"[apiclient] Created API client, waiting for the control plane to become ready[apiclient] All control plane components are healthy after 14.583864 seconds[apiclient] Waiting for at least one node to register[apiclient] First node has registered after 6.008990 seconds[token] Using token: e7986d.e440de5882342711[apiconfig] Created RBAC rules[addons] Created essential addon: kube-proxy[addons] Created essential addon: kube-dnsYour Kubernetes master has initialized successfully!To start using your cluster, you need to run (as a regular user): sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export KUBECONFIG=$HOME/admin.confYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/You can now join any number of machines by running the following on each nodeas root: kubeadm join --token 1111.1111111111111 *.*.*.*:6443

安装完成后,有一个内容非常重要,查看安装日志,拷贝类似于下面的语句,这条语句用来初始化之后的节点。

kubeadm join --token 11111.11111111111111 *.*.*.*:6443

接下来我们就可以去看看我们 K8S 的状态。我这使用的是 Mac。 Linux 和 Windows 的同学自行处理。

安装 kubectl

brew install kubectl

然后拷贝 Master 节点上的/etc/kubernetes/admin.conf文件到本机的~/.kube/config

之后执行kebectl get node。我这里已经安装完毕了,所以有全部信息,只要能看到节点,就算是成功了。

轻松加愉快的 Kubernetes 安装教程

安装网络组件

接下来我们安装网络组件,我这里使用的是flannel。创建2个文件

kube-flannel-rbac.yml

# Create the clusterrole and clusterrolebinding:# $ kubectl create -f kube-flannel-rbac.yml# Create the pod using the same namespace used by the flannel serviceaccount:# $ kubectl create --namespace kube-system -f kube-flannel.yml---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: flannelrules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - "" resources: - nodes verbs: - list - watch - apiGroups: - "" resources: - nodes/status verbs: - patch---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: flannelroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: flannelsubjects:- kind: ServiceAccount name: flannel namespace: kube-system

kube-flannel-ds.yaml

---apiVersion: v1kind: ServiceAccountmetadata: name: flannel namespace: kube-system---kind: ConfigMapapiVersion: v1metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flanneldata: cni-conf.json: | { "name": "cbr0", "type": "flannel", "delegate": { "isDefaultGateway": true } } net-conf.json: | { "Network": "10.96.0.0/12", "Backend": { "Type": "vxlan" } }---apiVersion: extensions/v1beta1kind: DaemonSetmetadata: name: kube-flannel-ds namespace: kube-system labels: tier: node app: flannelspec: template: metadata: labels: tier: node app: flannel spec: hostNetwork: true nodeSelector: beta.kubernetes.io/arch: amd64 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule serviceAccountName: flannel containers: - name: kube-flannel image: registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ] securityContext: privileged: true env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: run mountPath: /run - name: flannel-cfg mountPath: /etc/kube-flannel/ - name: install-cni image: registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ] volumeMounts: - name: cni mountPath: /etc/cni/net.d - name: flannel-cfg mountPath: /etc/kube-flannel/ volumes: - name: run hostPath: path: /run - name: cni hostPath: path: /etc/cni/net.d - name: flannel-cfg configMap: name: kube-flannel-cfg

然后使用使用命令进行配置。

kubectl create -f kube-flannel-rbac.ymlkubectl create -f kube-flannel-ds.yaml

启动 Node

分别在2个Node节点,执行下面的命令。

export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s"export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17"kubeadm join --token 1111.111111111111 *.*.*.*:6443

其中 kubeadm join 请参考启动 Master 节点中的内容。

其它

理论上我们安装到这里,K8S 就已经可以使用了。接下来主要是K8S的 Dashboard 的安装,仅供参考,不一定要安装。

安装 DashBoard 工具

创建文件kubernetes-dashboard.yaml

# Copyright 2015 Google Inc. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# Configuration to deploy release version of the Dashboard UI compatible with# Kubernetes 1.6 (RBAC enabled).## Example usage: kubectl create -f apiVersion: v1kind: ServiceAccountmetadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: kubernetes-dashboard labels: app: kubernetes-dashboardroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system---kind: DeploymentapiVersion: extensions/v1beta1metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-systemspec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard image: registry.cn-beijing.aliyuncs.com/bbt_k8s/kubernetes-dashboard-amd64:v1.6.0 imagePullPolicy: Always ports: - containerPort: 9090 protocol: TCP args: # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. # - --apiserver-host=http://my-address:port livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30 serviceAccountName: kubernetes-dashboard # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule---kind: ServiceapiVersion: v1metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-systemspec: type: NodePort ports: - port: 80 targetPort: 9090 selector: app: kubernetes-dashboard

创建文件dashboard-rbac.yaml

kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: dashboard-adminroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:- kind: ServiceAccount name: default namespace: kube-system

之后执行

kubectl create -f dashboard-rbac.ymlkubectl create -f kubernetes-dashboard.yaml

之后用下面的命令,获取到对应端口号。主要是看NodePort: 31867/TCP这样的内容。然后使用http://NodeIp:NodePort访问就可以了,其中 NodeIp 为 Master 或者 Node 的 IP,NodePort为NodePort的端口

kubectl describe --namespace kube-system service kubernetes-dashboard

到此,这份安装教程就到这里结束了。最后奉上一份安装后的截图。

轻松加愉快的 Kubernetes 安装教程

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • kubernetes
    +关注

    关注

    0

    文章

    219

    浏览量

    8578

原文标题:轻松加愉快的 Kubernetes 安装教程

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Kubernetes的Device Plugin设计解读

    摘要: Kubernetes的生态地位已经确立,可扩展性将是其发力的主战场。异构计算作为非常重要的新战场,Kubernetes非常重视。而异构计算需要强大的计算力和高性能网络,需要提供一种统一的方式
    发表于 03-12 16:23

    Kubernetes之路 2 - 利用LXCFS提升容器资源可见性

    节点上安装并启动lxcfs,我们将用Kubernetes的方式,用利用容器和DaemonSet方式来运行 lxcfs FUSE文件系统。本文所有示例代码可以通过以下地址从Github上获得git
    发表于 04-17 14:05

    阿里云宣布推出Serverless Kubernetes服务 30秒即可完成应用部署

    Kubernetes就是乘坐一辆自动驾驶汽车,轻松享受计算的自由。其优势在于,剥离了复杂耗时的管理运维工作,自动调配底层服务资源,该模式更符合对未来云计算的理解:用户无需关注环境配置、服务器管理、维护升级等操作
    发表于 05-03 15:38

    理解和创建Kubernetes对象

    Kubernetes对象总结
    发表于 04-11 15:14

    Kubernetes经验总结

    Kubernetes学习笔记——24 允许外部访问
    发表于 06-18 12:10

    浅析Kubernetes

    【k8s】Kubernetes基础概念
    发表于 09-27 09:11

    kubernetes部署与应用

    kubernetes运维笔记
    发表于 10-25 13:08

    kubernetes系统基本概念

    一文带你看透kubernetes 容器编排系统
    发表于 11-05 08:26

    Kubernetes Dashboard实践学习

    关于Kubernetes Dashboard的实践学习
    发表于 04-10 14:09

    Kubernetes API详解

    摘要:Kubernetes是Google开源的容器集群管理系统。它构建Ddocker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本文节选自
    发表于 10-12 16:19 0次下载
    <b class='flag-5'>Kubernetes</b> API详解

    登机助理机器人开始测试了,让你轻松愉快的上飞机

    荷兰皇家航空公司正在测试一款智能机器人,它能在机场帮乘客运送手提行李、指引登机口,如私人助理一样,让旅行更加轻松愉快
    的头像 发表于 07-21 10:19 2752次阅读

    企业可在Kubernetes轻松扩展NVIDIA GPU

      通过使用 Kubernetes 简化 GPU 的部署和管理, GPU 运营商使基础设施团队能够在几分钟内自动无误地扩展 GPU 应用程序。
    的头像 发表于 04-11 14:56 694次阅读

    一文详解Kubernetes架构原理

    打开这篇文章的同学,想必对 Docker 都不会陌生。Docker 是一种虚拟容器技术,它上手比较简单,只需在宿主机上起一个 Docker Engine,然后就能愉快的玩耍了,如:拉镜像、起容器、挂载数据、映射端口等等。相对于 Kubernetes(K8S)的上手,可
    的头像 发表于 07-14 09:50 855次阅读

    Kubernetes是怎样工作的?

    。 您可以将运行 Linux® 容器的主机组集群在一起,Kubernetes 可帮助您轻松高效地管理这些集群。
    的头像 发表于 05-12 16:13 330次阅读
    <b class='flag-5'>Kubernetes</b>是怎样工作的?

    Awesome 工具如何更好地管理Kubernetes

    。 这是一系列令人惊奇的工具,它们为您的 Kubernetes 增加了更多功能。 Helm Helm 是 Kubernetes 的软件包管理器,可以轻松地获得高
    的头像 发表于 06-25 16:12 377次阅读
    Awesome 工具如何更好地管理<b class='flag-5'>Kubernetes</b>