容器编排之Kubernetes1.6.1安装与配置
在经历了几年混乱的职业生涯之后,初步把未来延伸领域定位在容器云方向。区块链系列我还会继续写下去,且可能只会关注Hyperledger。
云计算是最近几年来火热的技术领域,不同于其他,他没有固定的行业领域限制,他只是基础设施。任何基建于计算机上的服务,在达到一定规模后,都可应用云计算解决方案使硬件资源高效利用,统一开发运维,提高服务可靠性,降低企业支出等等。近两年火热的大数据、人工智能等都离不开背后计算集群的支持。拥抱云计算,拥抱未来。且说到云计算,外行人都会觉得很高大上,其实我觉得更 多的是拿来主义,就是将一系列开源软件按照公司的业务架构搭配起来,大部分的工作其实是熟悉开源软件,解决他们的坑,顺便反馈开源社区,促进其发展。
云计算也是有领域划分的,从物理机–>虚拟机–>容器技术的发展,孵化出了openstack、docker,kubernetes等这样的开源项目,openstack使得物理机到虚拟机的转变变的简单,而docker的出现,更是将这种简单极致化,将云计算推向容器云阶段。而如何将docker的容器在集群的规模上高效的管理,则是kubernetes出现的源动力。
废话不多说,本文主要是手动安装配置kubernetes集群,一个master节点(10.1.2.146)和两个node节点(10.1.2.147、10.1.2.148)。发文的时候,kubernetes的最新版本为1.6.1,我们就安装这个版本吧。下载地址
系统配置
Linux i-pw3kctun 4.4.0-42-generic #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux H/W path Device Class Description ================================================== system OpenStack Nova /0 bus Motherboard /0/0 memory 96KiB BIOS /0/400 processor Intel Core Processor (Haswell) /0/1000 memory 1GiB System Memory /0/1000/0 memory 1GiB DIMM RAM /0/100 bridge 440FX - 82441FX PMC [Natoma] /0/100/1 bridge 82371SB PIIX3 ISA [Natoma/Triton II] /0/100/1.1 storage 82371SB PIIX3 IDE [Natoma/Triton II] /0/100/1.2 bus 82371SB PIIX3 USB [Natoma/Triton II] /0/100/1.2/1 usb1 bus UHCI Host Controller /0/100/1.2/1/1 input QEMU USB Tablet /0/100/1.3 bridge 82371AB/EB/MB PIIX4 ACPI /0/100/2 display GD 5446 /0/100/3 eth0 network Virtio network device /0/100/4 communication Virtio console /0/100/5 storage Virtio block device /0/100/6 generic Virtio memory balloon
先决条件
- 在node节点必须有docker,docker的安装请参考官方文档
- etcd 3:因为kubernetes1.6版本切换到了etcd 3,所以不要安装错了,安装文档参考官方文档
- flannel:此处我们采用flannel作为kubernetes的网络增强组件,现在有很多第三方开源软件支持kubernetes的集群pod互通,flannel只是其中的一种。安装文档参考官方文档
自定义安装
kubernetes官方提供了各种各样的安装方式,基于云提供商的,基于juju的,基于homebrew的,基于源码编译的,此处我们选择已经编译好的二进制文件安装。
注:下载下来的并不是kubernetes的可执行文件,而是一系列的脚本,可以理解为kubernetes 的下载器
下载下来后,解压缩
tar xzvf kubernetes.tar.gz cd kubernetes
执行get-kube-binaries.sh下载server和client的可执行文件
$ ./cluster/get-kube-binaries.sh Kubernetes release: v1.6.1 Server: linux/amd64 (to override, set KUBERNETES_SERVER_ARCH) Client: linux/amd64 (autodetected) Will download kubernetes-server-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.1 Will download and extract kubernetes-client-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.1 Is this ok? [Y]/n y % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 346M 1 3598k 0 0 398k 0 0:14:52 0:00:09 0:14:43 464k md5sum(kubernetes-server-linux-amd64.tar.gz)=c4c1e770789b5017df9f0ab0e945320a sha1sum(kubernetes-server-linux-amd64.tar.gz)=34066d8230a276650ad65ca459ac28dd2901e1c0 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 63 29.0M 63 18.3M 0 0 367k 0 0:01:20 0:00:51 0:00:29 396k md5sum(kubernetes-client-linux-amd64.tar.gz)=c2acf197ee6d9b56d3ee790b9aee789d sha1sum(kubernetes-client-linux-amd64.tar.gz)=10466d24f9e11f749b2b20747b4f096c664b05f3 Extracting /root/kubernetes/client/kubernetes-client-linux-amd64.tar.gz into /root/kubernetes/platforms/linux/amd64 Add '/root/kubernetes/client/bin' to your PATH to use newly-installed binaries.
执行该shell会自动下载kube的server和client可执行文件,其中客户端文件会自动安装在kubernetes目录下的client文件夹下,只需将bin添加到PATH下就可以了。
可以不用管这里的bin,server的可执行包里也包含了客户端命令行工具
服务端可执行文件下载到了server文件夹,没有被自动展开
cd server tar xzvf kubernetes-server-linux-amd64.tar.gz ll kubernetes/server/bin total 1.6G -rwxr-x--- 1 root root 115M Apr 4 04:54 cloud-controller-manager -rwxr-x--- 1 root root 182M Apr 4 04:54 hyperkube -rwxr-x--- 1 root root 53M Apr 4 04:54 kube-aggregator -rw-r----- 1 root root 33 Apr 4 04:54 kube-aggregator.docker_tag -rw-r----- 1 root root 54M Apr 4 04:54 kube-aggregator.tar -rwxr-x--- 1 root root 143M Apr 4 04:54 kube-apiserver -rw-r----- 1 root root 33 Apr 4 04:54 kube-apiserver.docker_tag -rw-r----- 1 root root 144M Apr 4 04:54 kube-apiserver.tar -rwxr-x--- 1 root root 126M Apr 4 04:54 kube-controller-manager -rw-r----- 1 root root 33 Apr 4 04:54 kube-controller-manager.docker_tag -rw-r----- 1 root root 127M Apr 4 04:54 kube-controller-manager.tar -rwxr-x--- 1 root root 62M Apr 4 04:54 kube-proxy -rw-r----- 1 root root 33 Apr 4 04:54 kube-proxy.docker_tag -rw-r----- 1 root root 106M Apr 4 04:54 kube-proxy.tar -rwxr-x--- 1 root root 73M Apr 4 04:54 kube-scheduler -rw-r----- 1 root root 33 Apr 4 04:54 kube-scheduler.docker_tag -rw-r----- 1 root root 74M Apr 4 04:54 kube-scheduler.tar -rwxr-x--- 1 root root 67M Apr 4 04:54 kubeadm -rwxr-x--- 1 root root 68M Apr 4 04:54 kubectl -rwxr-x--- 1 root root 65M Apr 4 04:54 kubefed -rwxr-x--- 1 root root 133M Apr 4 04:54 kubelet
这里就是最新版本的kubernetes可执行文件列表。要构建kubernetes集群,需要在master节点启动kube-apiserver, kube-controller-manager, kube-scheduler,在每个节点启动kubelet和kube-proxy。这里我们不直接执行,采用systemctl管理。
注:需要根据个人服务器文件路径自由定义,不可照抄
kube-apiserver.service
[Unit] Description=Kube-apiserver Service After=network.target [Service] Type=notify ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-apiserver \ --admission-control=NamespaceAutoProvision,LimitRanger,SecurityContextDeny \ --apiserver-count=1 \ --cors-allowed-origins=.* \ --enable-garbage-collector=false \ --etcd-servers=http://10.1.2.154:2379 \ --insecure-bind-address=0.0.0.0 \ --insecure-port=8080 \ --log-dir=/root/kubernetes/kube-apiserver \ --logtostderr=false \ --service-cluster-ip-range=192.168.2.0/24 \ --v=5 \ Restart=always LimitNOFILE=65536 [Install] WantedBy=default.target
kube-controller-manager.service
[Unit] Description=Kube-controller-manager Service After=network.target [Service] Type=simple ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-controller-manager \ --enable-garbage-collector=false \ --logtostderr=false \ --log-dir=/root/kubernetes/log/kube-controller-manager \ --pod-eviction-timeout=5m0s \ --master=http://0.0.0.0:8080 \ --node-monitor-grace-period=40s \ --terminated-pod-gc-threshold=12500 \ --leader-elect=true \ --v=4 \ Restart=always LimitNOFILE=65536 [Install] WantedBy=default.target
kube-scheduler.service
[Unit] Description=Kube-scheduler Service After=network.target [Service] Type=simple ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-scheduler \ --log-dir=/root/kubernetes/log/kube-scheduler \ --logtostderr=false \ --master=http://0.0.0.0:8080 \ --leader-elect=true \ --v=5 \ Restart=always LimitNOFILE=65536 [Install] WantedBy=default.target
接着执行命令:
systemctl --system daemon-reload systemctl start kube-apiserver.service systemctl start kube-controller-manager.service systemctl start kube-scheduler.service
如果想随服务器自动启动,请参考systemctl相关命令
这样,master上的kubernetes组件就全部跑起来了,可以使用kubectl检查是否运行正常:
╭─root@i-pyv2wj89 in ~/kubernetes/server/kubernetes/server/bin ╰$ ./kubectl cluster-info Kubernetes master is running at http://localhost:8080 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
接着,搭建两个Node节点,可以只将kube-proxy和kubelet拷贝到Node节点。
kubelet.service
[Unit] Description=Kubelet Service After=network.target [Service] Type=simple ExecStart=/root/kubernetes/kubelet \ --api-servers=http://10.1.2.154:8080 \ --hostname-override=10.1.2.147 \ --image-gc-high-threshold=80 \ --image-gc-low-threshold=50 \ --log-dir=/root/kubernetes/log/kubelet \ --logtostderr=false \ --pod-infra-container-image=docker.cloudin.com/google_containers/pause-amd64:3.0 \ --system-reserved cpu=2000m,memory=4G \ --v=5 \ Restart=always LimitNOFILE=65536 [Install] WantedBy=default.target
kube-proxy.service
[Unit] Description=Kube-proxy Service After=network.target [Service] Type=simple ExecStart=/root/kubernetes/kube-proxy \ --log-dir=/root/kubernetes/log/kube-proxy \ --logtostderr=false \ --master=http://10.1.2.154:8080 \ --v=5 \ Restart=always LimitNOFILE=65536 [Install] WantedBy=default.target
systemctl --system daemon-reload systemctl start kubelet.service systemctl start kube-proxy.service
检查集群搭建情况:
i-pyv2wj89 :: ~ » ./kubernetes/client/bin/kubectl get node NAME STATUS AGE VERSION 10.1.2.147 Ready 24m v1.6.1 10.1.2.148 Ready 1m v1.6.1
自此,kubernetes集群就搭建起来了,供大家参考。当然,这是最简单的集群配置,用于学习够了,但是生产环境还是要自定义更多的配置项。
本文转自中文社区-容器编排之Kubernetes1.6.1安装与配置

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes 1.6新特性系列 | 动态配置和存储类
存储(Storage)是运行有状态容器的关键要素,Kubernetes提供了强大的原语来管理存储。动态卷配置(Dynamic provisioning)是Kubernetes的独有功能,它可以根据需要动态的创建存储卷。在动态配置之前,集群管理员必须手动调用云/存储服 务提供商的接口来配置新的存储卷,然后创建PersistentVolume对象以在Kubernetes中表示和使用他们。通过动态配置,可以实现两个步骤的自动化,无须集群管理员预先配置存储资源,而是使用StorageClass对象制定的供应商来动态配置存储资源,具体请参考用户指南)。StorageClass本质上是为底层存储提供者描绘了蓝图,以及各种参数,例如磁盘类型(例如固态和标准磁盘)。 StorageClasses使用特定的存储平台或者云提供商为Kubernetes提供物理介质。多个存储配置以in-tree的形式(用户手册),但现在也支持out-of-tree配置器(请参阅kubernetes-incubator)。 在Kubernetes 1.6正式版中,动态配置被提升至稳定版(Kubernetes 1.4是Beta)...
- 下一篇
k8s1.6伸缩性升级,支持处理5000 Node 和 15 万个 Pod
上个夏天,我们分享了 Kubernetes 的伸缩性更新,经过一番努力,我们自豪的宣布 Kubernetes 1.6 能够处理 5000 个节点的集群和 15 万个 Pod 了;另外即使在这种负载规模下,端到端的 Pod 启动速度依然优于 2000 节点规模的 1.3 版本 的 Kubernetes 集群,API 调用的延迟依然满足 1 秒的 SLO。 本文中我们会讨论到 性能测试的指标和结果 提高性能的改进 未来在伸缩性方面的发展计划 XX 节点的集群意味着什么? 现在 Kubernetes 1.6 已经发布,那么当我们说到支持多少个节点的集群的时候,我们到底在说什么?前文说过,我们有两个性能相关的服务水平目标(SLO): API 响应性:99% 的 API 调用应该在一秒之内返回。 Pod 启动时间:99% 的 Pod 及其容器(已拉取镜像)在五秒之内完成启动。 跟以前一样,集群规模是可以超过 5000 节点的,但是会引起性能下降,可能无法满足 SLO 要求。 我们知道 SLO 的限制。还有很多我们没有覆盖到的系统因素。例如,新 Pod 启动之后,需要多久才能通过服务 IP 进行访...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker安装Oracle12C,快速搭建Oracle学习环境