高级运维工程师在线评测:http://www.gtalent.cn/exam/interview/nsYteJ5wFfWkMdb2

云计算概念和原理
What
云计算是将硬件服务器、网络设备、网络资源、操作系统、应用程序统一的管理和调度,将所有的资源统一的按需分配,租户可以根据自己的需求来按需购买和使用
云计算重点强调的是资源池、租户概念,资源池中资源可以分配或者租用给租户(企业内部、互联网用户),可以根据需求直接去购买或者租用,对于租户来讲,不需要关心资源是怎么来的,是怎么构建的
云计算服务分类
云计算(服务)可以按照服务类型来分类,分为三种类型:

IaaS(基础设施即服务:Infrastructure as a Service)
PaaS(平台即服务:Platform-as-a-Service)
SaaS(软件即服务:Software-as-a-Service)
 

国内的云计算发展目前处于IAAS和PAAS阶段,对于IT运维人员来讲,第一工作要务:了解云计算平台概念、用途、云计算平台构建、维护、部署、排错、优化、添加资源池、弹性扩容、弹性缩容等

 

计算分类
私有云:
私有云面向企业内部的资源服务、租户服务的,企业内部租户可以根据需求去私有云资源池申请各个资源;

公有云:
公有云面向互联网租户,互联网租户需要购买、采购、花费RMB去购买的资源;

混合云:
将私有云和公有云同时存在,既可以提供私有云服务,也可以提供公有云的服务;

主要的实现技术框架有两种:

Openstack
Kubernetes(K8S)

什么是K8S
K8S是云计算资源的管理平台、管理框架,基于K8S云计算项目可以:云计算平台部署、各个资源管理、调度、生成资源池、创建虚拟机、删除虚拟机、重启虚拟机等,Docker虚拟化是K8S云计算项目中一个模块,是K8S用于管理创建虚拟机、删除虚拟机、镜像、容器的组件;

使用Kubernetes可以实现如下功能:

自动化容器的部署和复制;
随时扩展或收缩容器规模;
将容器组织成组,并且提供容器间的负载均衡;
很容易地升级应用程序容器的新版本;
提供容器弹性,如果容器失效就替换它等。
K8S部署
构建一套K8S云计算平台,至少2台服务器(硬件服务器),基于Linux操作系统,最好Linux内核3.8+以上,推荐使用3.10内核版本,对应Linux操作系统发行版:RHEL7.x、CentOS7.x、Ubuntu16.x
构建K8S底层2台硬件服务器的配置(最低配置,生产环境越高越好):
CPU:1C
MEM:1G
DISK:40GB
NET:1000Mb+10Gb
K8S云计算框架技术,C/S模式,Master节点和Node节点,1台Master节点,一台Node节点
Master节点称为控制节点,用于管理Node节点,对Node节点上资源进行调度和管理的。
Node节点称为被控节点,用于创建Docker容器、虚拟机、管理容器、容器网络、镜像管理,主要用于提供云主机。
K8S Master安装配置

1.yum安装行管软件包

yum install kubernetes-master etcd flannel -y

2.关闭selinux,防火墙并且时间同步

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 可加入定时任务后service crond restart
[root@localhost ~]# ntpdate pool.ntp.org

3.修改etcd配置

[root@localhost ~]# cd /etc/etcd/
[root@localhost etcd]# cp etcd.conf etcd.conf.bak
[root@localhost etcd]# sed -i '/^#/d' etcd.conf

etcd.conf 文件内容

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.197.10:2379"

4.重启etcd服务

[root@localhost etcd]# service etcd restart

 

kubernetes配置修改

5.修改apiserver

[root@localhost etcd]# cd /etc/kubernetes/
[root@localhost kubernetes]# vim apiserver
# 示例中k8s和etcd在同一台主机上
# api监听地址
  8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# etcd服务所在的主机ip和端口
 17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.197.10:2379"

6.修改config文件

[root@localhost kubernetes]# vim config
# apiserverip 和使用端口
 22 KUBE_MASTER="--master=http://192.168.197.10:8080"

7.启动服务

[root@localhost kubernetes]# service kube-apiserver start
Redirecting to /bin/systemctl start kube-apiserver.service
[root@localhost kubernetes]# service kube-controller-manager start
Redirecting to /bin/systemctl start kube-controller-manager.service
[root@localhost kubernetes]# service kube-scheduler start
Redirecting to /bin/systemctl start kube-scheduler.service
[root@localhost kubernetes]# ps -ef | grep -E "apiserver|controller|scheduler"
kube     15376     1  1 14:32 ?        00:00:00 /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://192.168.197.10:2379 --insecure-bind-address=192.168.197.10 --allow-privileged=false --service-cluster-ip-range=10.254.0.0/16 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
kube     15396     1  1 14:32 ?        00:00:00 /usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://192.168.197.10:8080
kube     15417     1  0 14:33 ?        00:00:00 /usr/bin/kube-scheduler --logtostderr=true --v=0 --master=http://192.168.197.10:8080
root     15423  1074  0 14:34 pts/0    00:00:00 grep --color=auto -E apiserver|controller|scheduler

K8S Node安装配置

  1. 相关软件包yum安装
[root@localhost ~]# yum install kubernetes-node docker flannel *rhsm* -y
  1. 修改config
[root@localhost ~]# cd /etc/kubernetes/
[root@localhost kubernetes]# vim config
 22 KUBE_MASTER="--master=http://192.168.197.10:8080"
  1. 修改kubelet(修改为节点的主机ip)
# 客户端监听地址
  5 KUBELET_ADDRESS="--address=192.168.197.11"
# 客户端主机名
 11 KUBELET_HOSTNAME="--hostname-override=192.168.197.11"
# k8s master API 
 14 KUBELET_API_SERVER="--api-servers=http://192.168.197.10:8080"
  1. Node启动服务
[root@localhost kubernetes]# service kube-proxy restart
Redirecting to /bin/systemctl restart kube-proxy.service
[root@localhost kubernetes]# service kubelet restart
Redirecting to /bin/systemctl restart kubelet.service
[root@localhost kubernetes]# service docker restart
Redirecting to /bin/systemctl restart docker.service
  1. 集群状态检查
[root@localhost kubernetes]# etcdctl member list
8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://192.168.197.10:2379 isLeader=true
[root@localhost kubernetes]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.197.10:2379
cluster is healthy
[root@localhost kubernetes]# etcdctl get /atomic.io/network/config
Error:  100: Key not found (/atomic.io) [5290]
  1. 创建etcd Key,指定子网
[root@localhost kubernetes]# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
{"Network":"172.17.0.0/16"}
[root@localhost kubernetes]# etcdctl get /atomic.io/network/config
{"Network":"172.17.0.0/16"}
  1. flannel网络配置(网络互通,所有集群内的主机都需要配置)
[root@localhost kubernetes]# vim /etc/sysconfig/flanneld 
# 指定etcd
  4 FLANNEL_ETCD_ENDPOINTS="http://192.168.197.10:2379"
# 在启动服务
[root@localhost kubernetes]# service flanneld restart
Redirecting to /bin/systemctl restart flanneld.service

此时主机网卡出现flannel0

Master
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 172.17.94.0 netmask 255.255.0.0 destination 172.17.94.0
inet6 fe80::4b0f:27a9:8492:8801 prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 144 (144.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Node
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 172.17.28.0 netmask 255.255.0.0 destination 172.17.28.0
inet6 fe80::475a:f78e:d2e3:d375 prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 144 (144.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看子网

[root@localhost kubernetes]# etcdctl ls /atomic.io/network/subnets
/atomic.io/network/subnets/172.17.28.0-24
/atomic.io/network/subnets/172.17.94.0-24

Node节点重启docker服务

[root@localhost kubernetes]# service docker restart
Redirecting to /bin/systemctl restart docker.service

注:如果网络不通,让iptables打开forward

[root@localhost kubernetes]# iptables -P FORWARD ACCEPT
  1. 在Master上查看节点
[root@localhost kubernetes]# kubectl get nodes
NAME             STATUS    AGE
192.168.197.11   Ready     1h

王老师说运维之菜鸟kubernetes(k8s)入门实战:http://www.codeforest.cn/course/473