Centos7下yum安装kubernetes
一、前言
Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件,目前centos yum源上最新版本为1.5.2。
本文基于Centos7.5构建Kubernetes平台,在正式介绍之前,大家有必要先理解Kubernetes几个核心概念及其承担的功能。
以下为Kubernetes的架构设计图:
1. Pods
在Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个可以被创建、销毁、调度、管理的最小的部署单元。比如一个或一组容器。
2. Replication Controllers
Replication Controller是Kubernetes系统中最有用的功能,实现复制多个Pod副本,往往一个应用需要多个Pod来支撑,并且可以保证其复制的副本数,即使副本所调度分配的主宿机出现异常,通过Replication Controller可以保证在其它主宿机启用同等数量的Pod。Replication Controller可以通过repcon模板来创建多个Pod副本,同样也可以直接复制已存在Pod,需要通过Label selector来关联。
3. Services
Services是Kubernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源,目前的版本是通过iptables的nat转发来实现,转发的目标端口为Kube_proxy生成的随机端口,目前只提供GOOGLE云上的访问调度,如GCE。
4. Labels
Labels是用于区分Pod、Service、Replication Controller的key/value键值对,仅使用在Pod、Service、 Replication Controller之间的关系识别,但对这些单元本身进行操作时得使用name标签。
5. Proxy
Proxy不但解决了同一主宿机相同服务端口冲突的问题,还提供了Service转发服务端口对外提供服务的能力,Proxy后端使用了随机、轮循负载均衡算法。
6. Deployment
Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态,例如,您想将所有的webapp:v1.0.9升级成webapp:v1.1.0,您只需创建一个Deployment,Kubernetes会按照Deployment自动进行升级。现在,您可以通过Deployment来创建新的资源(pod,rs,rc),替换已经存在的资源等。 Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险
二、Kubernetes集群部署
1,环境配置说明
etcd 192.168.20.73
master 192.168.20.73
node1 192.168.20.74 node2 192.168.20.75
2,事前准备
关闭防火墙;关闭SELinux;关闭Swap交换分区;master与node之间ssh免密登录;同步NTP时间;所有IP均能访问外网。操作过程略。
[root@master ~]# docker --version
Docker version 1.13., build 6e3bb8e/1.13.
[root@master ~]# kubectl --version
Kubernetes v1.5.2
[root@master ~]# etcd --version
etcd Version: 3.2.
Git SHA: 1674e68
Go Version: go1.9.4
Go OS/Arch: linux/amd64
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.5. (Core)
[root@master ~]# uname -a
Linux master 4.17.-.el7.elrepo.x86_64 # SMP Wed Jul :: EDT x86_64 x86_64 x86_64 GNU/Linux
3,安装部署(在master上操作)
#每台添加hosts文件
192.168.20.73 master
192.168.20.73 etcd3
192.168.20.74 node1
192.168.20.75 node2 #配置kubernetes源
vim kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg #master上yum安装etcd kubernetes-master
#安装kubernetes时也可以不用区分master或node,直接使用 yum -y install kubernetes 会同时安装master和node包
yum -y install etcd kubernetes-master
4,此过程会同时安装docker、kuberlet、kuberctl等工具,非常方便。如果此前安装过docker-ce版本,会提示报错。卸载重装即可。
5,修改配置文件。本机etcd已部署集群模式,所以etcd名称为etcd3,在此可以自定义etcd1 或默认default。
[root@master kubernetes]# pwd
/etc/kubernetes
[root@master kubernetes]# ls
apiserver config controller-manager kubelet proxy scheduler #修改etcd配置文件
[root@master ~]# grep -v '^#' /etc/etcd/etcd.conf
ETCD_NAME=etcd3 ETCD_DATA_DIR="/var/lib/etcd/etcd3" ETCD_LISTEN_PEER_URLS="http://192.168.20.73:2380" ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://192.168.20.73:2379" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.20.73:2380" ETCD_INITIAL_CLUSTER="etcd3=http://192.168.20.73:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="etcd-test" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.20.73:2379" #启动服务
systemctl start etcd
systemcet enable etcd # 检查etcd cluster状态
[root@master ~]# etcdctl cluster-health
member ec71f609370df393 is healthy: got healthy result from http://192.168.20.73:2379
cluster is healthy
#检查etcd成员列表,由于是单节点部署,只有一台
[root@master ~]# etcdctl member list
ec71f609370df393: name=etcd3 peerURLs=http://192.168.20.73:2380 clientURLs=http://192.168.20.73:2379 isLeader=true
6,etcd集群模式cluster状态为:(etcd集群模式,参加另一篇文章。)
[root@master ~]# etcdctl cluster-health
member 85b5f1a0537e385d is healthy: got healthy result from http://192.168.20.71:2379
member 9f304c9e0feb949d is healthy: got healthy result from http://192.168.20.72:2379
member ec71f609370df393 is healthy: got healthy result from http://192.168.20.73:2379
cluster is healthy
[root@master ~]# etcdctl member list
85b5f1a0537e385d: name=etcd1 peerURLs=http://192.168.20.71:2380 clientURLs=http://192.168.20.71:2379 isLeader=false
9f304c9e0feb949d: name=etcd2 peerURLs=http://192.168.20.72:2380 clientURLs=http://192.168.20.72:2379 isLeader=false
ec71f609370df393: name=etcd3 peerURLs=http://192.168.20.73:2380 clientURLs=http://192.168.20.73:2379 isLeader=true
7,配置master服务
#)kube-apiserver配置文件
[root@master ~]# cat /etc/kubernetes/config
###
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.20.73:8080"
[root@master ~]# cat /etc/kubernetes/apiserver
###
## kubernetes system config
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.20.73:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
[root@master ~]# #)controller-manager配置文件
[root@master ~]# cat /etc/kubernetes/controller-manager
###
# The following values are used to configure the kubernetes controller-manager # defaults from config and apiserver should be adequate # Add your own!
KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key" #)scheduler配置文件
[root@master ~]# cat /etc/kubernetes/scheduler
###
# kubernetes scheduler config # default config should be adequate # Add your own!
KUBE_SCHEDULER_ARGS=""
## 补充说明
#此处会发现,多个serviceaccount.key的配置行,是由于k8s大部分访问都需要证书认证,在后续创建pod时就会报错
#查看 tail -f /var/log/message 发现报以下错误: kube-controller-manager: I0919 ::49.292014 event.go:] Event(api.ObjectReference{Kind:"Deployment", Namespace:"default", Name:"redis-master", UID:"774ac6cd-bbf2-11e8-be6f-00505684252c", APIVersion:"extensions", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'ScalingReplicaSet' Scaled up replica set redis-master- to
Sep :: master3 kube-controller-manager: I0919 ::58.320908 event.go:] Event(api.ObjectReference{Kind:"ReplicaSet", Namespace:"default", Name:"redis-master-1610630896", UID:"774d552a-bbf2-11e8-be6f-00505684252c", APIVersion:"extensions", ResourceVersion:"", FieldPath:""}): type: 'Warning' reason: 'FailedCreate' Error creating: No API token found for service account "default", retry after the token is automatically created and added to the service account
解决办法:
1)首先生成密钥:
openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048
2)编辑/etc/kubenetes/apiserver
添加以下内容:
KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key"
3)再编辑/etc/kubernetes/controller-manager
添加以下内容:
KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key"
不建议修改apiserver的配置文件:
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
删除 ServiceAccount,即为:KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
8,我们继续配置node节点,最后一起启动吧
#)在etcd服务上首先需要添加网络,即在master上
[root@master ~]# etcdctl set /k8s/network/config '{"Network": "10.255.0.0/16"}'
{"Network": "10.255.0.0/16"}
[root@master ~]# etcdctl get /k8s/network/config
{"Network": "10.255.0.0/16"} #此配置是将数据写入到etcd数据目录中的,不会生成实际目录 #)配置node1节点,网络控件采用flannel方式
#yum 安装kubernetes-node 和 flannel
yum -y install kubernetes-node flannel #)安装成功后,修改配置文件
[root@node1 ~]# grep -v '^#' /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.20.73:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens192"
# 网卡信息用ip a命令获取 #)配置node1
[root@node1 ~]# ls /etc/kubernetes/
config kubelet proxy
[root@node1 ~]# cat /etc/kubernetes/config
###
# kubernetes system config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.20.73:8080"
[root@node1 ~]# cat /etc/kubernetes/kubelet
###
KUBELET_ADDRESS="--address=192.168.20.74"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=192.168.20.74"
KUBELET_API_SERVER="--api-servers=http://192.168.20.73:8080"
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.200.10/source/pause-amd64:3.1"
KUBELET_ARGS=""
[root@node1 ~]# cat /etc/kubernetes/proxy
###
# kubernetes proxy config # default config should be adequate # Add your own!
KUBE_PROXY_ARGS="0.0.0.0" ##备注 kubelet配置文件,默认image下载方式是外网下载,可以修改为自己的harbor地址
9,node2配置与node1相同,唯一需要将ip修改为node2的IP地址即可。
10,激动人心的启动时刻:
#首先启动master,之前已启动了etcd服务,可通过ss命令查看端口状态
#按顺序启动master上的服务
systemctl start kube-apiserver kube-controller-manager kube-scheduler #按顺序启动两台node节点
systemctl start flanneld kubelet kube-proxy #在master上看到node状态
[root@master ~]# kubectl get nodes
NAME STATUS AGE
192.168.20.74 Ready 3d
192.168.20.75 Ready 3d
至此,kubernetes搭建完成。
kubernetes中文社区:https://www.kubernetes.org.cn/
kubernetes中文社区命令使用:http://docs.kubernetes.org.cn/683.html
Centos7下yum安装kubernetes的更多相关文章
- centos7 下 yum 安装Nginx
centos7 下 yum 安装和配置 Nginx 添加yum源 Nginx不在默认的yum源中,可以使用epel或者官网的yum源,这里使用官网的yum源 rpm -ivh http://nginx ...
- CentOS7 下 yum 安装 Docker CE
前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker 官网有安装步骤,本文只是记录 ...
- Centos7 下Yum安装OpenLdap
网上的教程一大堆,也没用具体说明版本,所以很多操作方法都不一样,把我踩过的坑记录下来 环境: Centos7 OpenLdap 2.4.44 openldap新版本和老版本的配置方法差别特别大 安装步 ...
- 【转】Centos7下Yum安装PHP5.5,5.6,7.0
默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...
- Centos7下yum安装配置nginx与php
实现LNMP环境搭建. 开始安装Nginx和PHP-FPM之前,首先卸载系统中以前安装的Apache和PHP保证安装不会冲突.用root登录输入下面的命令: yum remve httpd* php* ...
- Centos7下Yum安装PHP5.5,5.6,7.0
默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...
- CentOS7下yum安装Redis
(1).Redis概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value(键值型)数据库(非关系型数据库),并提供多种语言的API. Redi ...
- Centos7下yum安装mydql8
昨天安装mydql时总是报错缺少插件,虽然最后安装上了,但还是在此记录下 一. 安装centos7系统系统 在选择安装基本环境时,选择基本环境为"网页服务器",昨天我因为选择了&l ...
- Centos7下 yum安装php扩展
linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...
随机推荐
- ZJOI2013 K大数查询 和 LG3380【模板】二逼平衡树(树套树)
K大数查询 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c:如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的 ...
- 持久化存储与HTTP缓存
本文主要学习一下一些高级的HTTP知识,例如Session LocalStorage Cache-Control Expires ETag 其实主要就是涉及到了持久化存储与缓存的技术 在此之前已经学习 ...
- ip端口协议,SSHj加密连接
SSH协议----一旦linux服务器开机,SSH协议就不断的侦听22端口,一旦有连接到达,就校验连接用户名和密码: 可以理解为连接ip端口为找到一栋大楼,发送用户名和密码为向大楼保安出示证件.SSH ...
- Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)
kubectl top pod --all-namespaces Error from server (NotFound): the server could not find the request ...
- nginx负载均衡 页面缓存
nginx的upstream目前支持4种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight ...
- HDU 5113 Black And White ( 2014 北京区预赛 B 、搜索 + 剪枝 )
题目链接 题意 : 给出 n * m 的网格.要你用 k 种不同的颜色填给出的网格.使得相邻的格子颜色不同.若有解要输出具体的方案 分析 : 看似构造.实则搜索.手构构半天没有什么好想法 直接搜就行了 ...
- Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 今年是国 ...
- 2019icpc南京网络赛 F 主席树
题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...
- objdump命令解析
[objdump] 相关链接: 实例分析objdump反汇编用法 - 在路上 - CSDN博客 https://blog.csdn.net/u012247418/article/details/80 ...
- 进程间通信之管道--pipe和fifo使用
匿名管道pipe 函数原型: #include <unistd.h> int pipe(int fildes[2]); 参数说明 fildes是我们传入的数组,也是一个传出参数.filde ...