kubernetes 提供啥功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes 提供啥功能相关的知识,希望对你有一定的参考价值。
Kubernetes,是开源容器应用自动化部署技术,也就是大家经常说的k8s。
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
使用Kubernetes可以:
自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它,等等...
它有这些特点:
可移植:支持公有云,私有云,混合云,多重云 multi-cloud
可扩展:模块化,插件化,可挂载,可组合
自动化:自动部署,自动重启,自动复制,自动伸缩/扩展
如果还有想要了解的可以到官网或是相关教程视频中看看,比如B站这个视频教程:
参考技术A Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS和Red Hat
Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。我们
(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种
与计算集群交互的标准方式。Kubernetes重新实现了Google在构建集群应用时积累的经验。这些概念包括如下内容:
Pods:一种将容器组织在一起的方法;
Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);
Labels:一种可以找到和查询容器的方法;
Services:一个用于实现某一特定功能的容器组;
因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。
Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。Mesos是分布式系统内核,它可以将不同的机器整
合在一个逻辑计算机上面。当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。有很多的现代化可扩展性的数据处理应
用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。在
某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
单并且容易管理。
有趣的是Mesos正在接受Kubernetes的理念,并已经开始支持Kubernetes
API。因此如果你需要它们的话,它将是对你的Kubernetes应用去获得更多能力的一个便捷方式(比如高可用的主干、更加高级的调度命令、去管控很
大数目结点的能力),同时能够很好的适用于产品级工作环境中(毕竟Kubernetes仍然还是一个初始版本)。
当被问到区别的时候,我会这样回答:
如果你是一个集群世界的新手,那Kubernetes是一个很棒的开始。它可以用最快的、最简单的、最轻量级的方式来解决你的问题,并帮
助你进行面向集群的开发。它提供了一个高水平的可移植方案,因为很多厂商已经开始支持Kubernetes,例如微软、IBM、Red
Hat、CoreOS、MesoSphere、VMWare等。
如果你拥有已经存在的工作任务(Hadoop、Spark、Kafka等),那Mesos可以给你提供了一个将不同工作任务相互交错的框架,然后还可以加入一些新的东西,比如Kubernetes应用。
如果你想使用的功能Kuberntes还没实现,那Mesos是一个不错的替代品,毕竟它已经成熟。 参考技术B 容器凭借其良好的移植性,敏捷性和革命性的打包方式迅速成为云服务的新基础设施。但 Docker 毕竟只是 “container runtime”,我们需要一个编排框架作为系统核心来串联开发、测试、部署、运维等整个软件生命周期。kubernetes 就提供这样一个框架,提供大量容器的部署、编排、管理的能力。 参考技术C 它是一个全新的基于容器技术的分布式架构领先方案,确切地说,Kubernetes是谷歌严格保密十几年的秘密武器Borg的一个开源版本。Borg是谷歌内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。
环境不一致使得应用部署出现了各种问题,从而产生Docker容器来解决应用部署的问题。而大集群上容器的部署、伸缩和管理的各种问题,衍生出来了容器编排引擎,比较出名的有Kubernetes和Docker。
Kubernetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境的容器编排,Kubernetes名字太长了,叫起来比较麻烦,所以简称为K8S。
Kubernetes是一个开放的开发平台,它不局限于任何一种语言,没有限定任何编程接口,所以无论是Java、GO、C++还是用Python编写的任务,都可以被映射为Kubernetes的service,并通过标准的TCP通信协议进行交互。此外,Kubernetes平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。作用如下:
Kubernetes提供了完善的管理工具,包括开发、部署、测试、运维、监控等;此外,Kubernetes还是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式完备的分布式系统开发和支撑平台,具备完备的集群管理能力:故障自愈、服务发现与负载均衡、自动部署与回滚、自动伸缩。
kubernetes 的master节点挂了对整个集群有啥影响
架构都知道Master节点在整个集群中的位置,为了保证整个架构的高可用,www.bjldfw.com提供了HA的架构,处于兴趣和对架构的进一步了解,我在自己的电脑实践以下.环境:
CentOS 7.3,www.bjldfw.com版本
Client Version: version.InfoMajor:"1", Minor:"5", GitVersion:"v1.5.1", GitCommit:"82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState:"clean", BuildDate:"2016-12-14T00:57:05Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"
Server Version: version.InfoMajor:"1", Minor:"5", GitVersion:"v1.5.1", GitCommit:"82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState:"clean", BuildDate:"2016-12-14T00:52:01Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"
主机环境 /etc/hosts
192.168.0.107 k8s-master1
192.168.0.108 k8s-master2
192.168.0.109 k8s-master3
1.搭建ETCD的集群
?禁止selinux以及防火墙
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
?安装软件包
yum -y install ntppdate gcc git vim wget
?配置定时更新
*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1
?下载安装包
cd /usr/src
wget https://github.com/coreos/etcd/releases/download/v3.0.15/etcd-v3.0.15-linux-amd64.tar.gz
tar -xvf https://github.com/coreos/etcd/releases/download/v3.0.15/etcd-v3.0.15-linux-amd64.tar.gz
cp etcd-v3.0.15-linux-amd64/etcd* /usr/local/bin
?编写一个deploy-etcd.sh的脚本,并运行
#!/bin/bash
# Copyright 2014 The www.bjldfw.com Authors.
#
# 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.
## Create etcd.conf, etcd.service, and start etcd service.
ETCD_NAME=`hostname`
ETCD_DATA_DIR=/var/lib/etcd
ETCD_CONF_DIR=/etc/etcd
ETCD_CLUSTER='k8s-master1=.107:2380,k8s-master2=.108:2380,k8s-master3=.109:2380'
ETCD_LISTEN_IP=`ip addr show enp0s3 |grep -w 'inet' |awk -F " " 'print $2' |awk -F "/" 'print $1'`
#useradd etcd
mkdir -p $ETCD_DATA_DIR $ETCD_CONF_DIR
chown -R etcd.etcd $ETCD_DATA_DIR
cat <<EOF >/etc/etcd/etcd.conf
# [member]
ETCD_NAME=$ETCD_NAME
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_SNAPSHOT_COUNT="10000"
ETCD_HEARTBEAT_INTERVAL="100"
ETCD_ELECTION_TIMEOUT="1000"
ETCD_LISTEN_PEER_URLS="http://$ETCD_LISTEN_IP:2380"
ETCD_LISTEN_CLIENT_URLS="http://$ETCD_LISTEN_IP:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_MAX_WALS="5"
#ETCD_CORS=""
#
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$ETCD_LISTEN_IP:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="$ETCD_CLUSTER"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://$ETCD_LISTEN_IP:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_STRICT_RECONFIG_CHECK="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#
#[proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[logging]
#ETCD_DEBUG="false"
# examples for -log-package-levels etcdserver=WARNING,security=DEBUG
#ETCD_LOG_PACKAGE_LEVELS=""
EOF
cat <<EOF >//usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
#ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/local/bin/etcd --name=\"$ETCD_NAME\" --data-dir=\"$ETCD_DATA_DIR\" --listen-client-urls=\"$ETCD_LISTEN_CLIENT_URLS\""
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/local/bin/etcd"
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
?运行如下命令
systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd
etcdctl cluster-health
?发现如下错误:
[root@k8s-master1 ~]# etcdctl cluster-health
cluster may be unhealthy: failed to list members
Error: client: etcd cluster is unavailable or misconfigured
error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused
error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused
原因是etcdctl总是去找本地的地址,指定endpoint,输出如下:
[root@k8s-master1 ~]# etcdctl -endpoints ".107:2379,.108:2379,.109:2379" cluster-health
member 1578ba76eb3abe05 is healthy: got healthy result from .108:2379
member beb7fd3596aa26eb is healthy: got healthy result from .109:2379
member e6bdc10e37172e00 is healthy: got healthy result from .107:2379
cluster is healthy
?默认master和etcd部署在同一台设备,共三台相互冗余
?通过HFS启动个http server,安装节点会从这里拉取镜像和rpm
先下载hfs,因为我是在windows 7的主机环境,所以下载一个windows版本,启动以后,将下载的目录和文件都拖到hfs界面中,如图
关掉windows防火墙.
修改k8s-deploy.sh脚本,修改的地方如下
HTTP_SERVER=192.168.0.103:8000
.
.
.
#master侧不需要修改成ip,保持原来的$(master_ip)就可以,但replicate侧需要修改,具体原因还需要查
kube::copy_master_config()
local master_ip=$(etcdctl get ha_master)
mkdir -p /etc/www.bjldfw.com
scp -r root@192.168.0.107:/etc/www.bjldfw.com/* /etc/www.bjldfw.com/
systemctl start kubelet
?Master节点
curl -L .101:8000/k8s-deploy.sh | bash -s master \
--api-advertise-addresses=192.168.0.110 \
--external-etcd-endpoints=.107:2379,.108:2379,.109:2379
?192.168.0.101:8000 是我的http-server, 注意要将k8s-deploy.sh 里的HTTP-SERVER变量也改下
?–api-advertise-addresses 是VIP地址
?–external-etcd-endpoints 是你的etcd集群地址,这样kubeadm将不再生成etcd.yaml manifest文件 参考技术A 我先整体看Kubernetes些理念基本架构网络、资源管理、存储、服务发现、负载均衡、高用、rollingupgrade、安全、监控等面向家简单介绍Kubernetes些主要特性包括些需要注意问题主要目帮助家快速理解Kubernetes主要功能今研究使用具候所参考帮助本回答被提问者采纳
以上是关于kubernetes 提供啥功能的主要内容,如果未能解决你的问题,请参考以下文章
Kubernetes 中的 Label 和 Selector 有啥区别?