虚拟化运维--K8S--简介(九)

一、Kubernetes简介

  Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
其主要功能如下:

  1. 使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。
  2. 以集群的方式运行、管理跨机器的容器。
  3. 解决Docker跨机器容器之间的通讯问题。
  4. Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。
    当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。

K8s架构概览:
K8s集群由主结点和工作结点两类结点构成。其中主结点上运行着K8s Control Plane,控制并管理着整个K8s系统;工作结点上运行用户实际部署到K8s应用。

K8s架构概览

K8s的结点上运行着一些组件,共同协作以完成容器编排,其中主要的组件有:

etcd一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态。
K8s API server 用户程序(如kubectl)、K8s其它组件之间通信的接口。
K8s其它组件之间不直接通信,而是通过API server通信的。这一点在上图的连接中可以体现,例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。
Scheduler排程组件,为用户应用的每一可部署组件分配工作结点。
Controller Manager执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。
kube-proxy在应用组件间负载均衡网络流量。
Kubelet 管理工作结点上的容器。
Container runtime Docker, rkt等实际运行容器的组件。

官网:https://kubernetes.io/
源码:https://github.com/kubernetes

二、Kubernetes主要概念

1、Pods
Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Minion(Host)上,看作一个统一管理单元,共享相同的volumes和network namespace/IP和Port空间。

2、Services
Services也是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。

3、Replication Controllers
Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的pods,Replication Controller根据label selector来关联,通过修改pods的label可以删除对应的pods。

Controller主要有如下用法:
1)Rescheduling
如上所述,Replication Controller会确保Kubernetes集群中指定的pod副本(replicas)在运行, 即使在节点出错时。

  1. Scaling
    通过修改Replication Controller的副本(replicas)数量来水平扩展或者缩小运行的pods。
  2. Rolling updates
    Replication Controller的设计原则使得可以一个一个地替换pods来rolling updates服务。
  3. Multiple release tracks
    如果需要在系统中运行multiple release的服务,Replication Controller使用labels来区分multiple release tracks。

4、Labels
Labels是用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labels是Service和Replication Controller运行的基础,为了将访问Service的请求转发给后端提供服务的多个容器,正是通过标识容器的labels来选择正确的容器。同样,Replication Controller也使用labels来管理通过pod 模板创建的一组容器,这样Replication Controller可以更加容易,方便地管理多个容器,无论有多少容器。

运行架构图

Controller Manager中的控制器监视到新的部署描述后,根据部署描述,创建ReplicaSet、Pod等资源。Scheduler监视到新的Pod资源后,结合集群的资源情况,选定一或多个工作结点运行Pod。工作结点上的Kubelet监视到有Pod被计划在自己的结点后,向Docker等Container runtime发出启动容器的指令,Docker engineer将按照指令从Docker registy拉取镜像,然后启动并运行容器。

三、Kubernetes官网

  1. 官网
    https://kubernetes.io/

  2. 下载
    文档地址:https://kubernetes.io/docs/setup/release/notes/#

    下载地址

  3. 前置条件

# 1. 安装docker
# 卸载旧版本
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

# 设置 yum repository
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加下载仓库
[root@manager ~]# sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 安装并启动 docker
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# sudo yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
# 设置开机启动
[root@manager ~]# sudo systemctl enable docker
[root@manager ~]# sudo systemctl start docker

# 检查 docker 版本
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# docker version

# 2. 安装 nfs-utils
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# sudo yum install -y nfs-utils
# 说明:必须先安装 nfs-utils 才能挂载 nfs 网络存储

# 3. K8S基本配置
# 配置K8S的yum源
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 关闭 防火墙、SeLinux、swap
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# systemctl stop firewalld
[root@manager ~]# systemctl disable firewalld
# 表示关闭selinux防火墙
[root@manager ~]# setenforce 0
[root@manager ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭系统交换区
[root@manager ~]# swapoff -a
[root@manager ~]# yes | cp /etc/fstab /etc/fstab_bak
[root@manager ~]# cat /etc/fstab_bak |grep -v swap > /etc/fstab

# 4. 修改 /etc/sysctl.conf
# 在master节点和worker节点都要执行
[root@manager ~]# vi /etc/sysctl.conf
# 内容
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 在 master 节点和 worker 节点都要执行
[root@manager ~]# sysctl -p
  1. 修改主机名
# 192.168.77.129
[root@localhost ~]# hostnamectl  manager    
# 192.168.77.128
[root@localhost ~]# hostnamectl  node2  
# 192.168.77.132
[root@localhost ~]# hostnamectl  node1  
  1. 更改Hostname为 master、node1、node2,配置IP地址,配置3台测试机的/etc/hosts文件(在三台服务器上同步)
[root@manager ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.77.129 manager  
192.168.77.128 node2    
192.168.77.132 node1    

  1. 时间校对(三台机器都做时间校对)
[root@manager ~]# yum install ntpdate
[root@manager ~]# ntpdate ntp1.aliyun.com
13 Sep 14:48:02 ntpdate[1596]: adjust time server 120.25.115.20 offset -0.015854 sec
 # 查询时钟
[root@manager ~]# hwclock
2019年10月18日 星期五 15时15分07秒  -0.112326 秒

四、常见错误

  1. the number of available CPUs 1 is less than the required 2
    CPU最少必须为2个。
  2. [ERROR CRI]: container runtime is not running: output: Cannot connect to the Docker daemon at tcp://0.0.0.0:2375. Is the docker daemon running?
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654

将管理地址写入 /etc/profile:

echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile

使profile生效:

source /etc/profile
  1. 节点为NotReady
    Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specif...
    解决:
    出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
  1. kubectl error: The connection to the server localhost:8080 was refused
    使用kuberadm搭建的集群环境,work节点 使用 kubectl查询资源报错
    原因:
    kubeadm搭建完环境之后会删除work节点上的admin.conf的认证配置文件,如果需要在work节点上使用kubectl查询资源,需要将master节点的admin.conf 拷贝到work节点
    解决办法:
    1.拷贝admin.conf至work
/etc/kubernetes/admin.conf 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容