centos7基于kubeadm安装部署Kubernetes (1.15.2)集群

一、什么是 Kubernetes

Kubernetes 是 Google (谷歌内部:Borg)开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。

二、 Kubernetes架构和组件

K8S集群中有管理节点工作节点两种类型。

1)架构

k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程
工作节点是Kubernetes集群架构中真正运行Pod的节点,为容器和Pod提供计算资源,Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期,并与集群其他节点进行通信。

2)核心组件

管理节点:
1.Kubernetes API Server
   作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
  2.Kubernetes Scheduler
  为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
 3.Kubernetes Controller
  负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。
工作节点:
1.Kubelet
  负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
  2.Kubernetes Proxy
  负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。

三、基础环境准备

环境配置信息如下(本次采用虚拟机作为测试环境):

IP地址 主机名 系统 内核版本 CPU 内存
192.168.100.6 master01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.7 node01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.8 node02.cluster.k8 CentOS 7.6 5.2.6 4c 4G

1.设置主机名hostname,如在master节点上执行:

[[email protected] ~]# hostnamectl set-hostname master01.cluster.k8

可以按照此方式设置其它主机的主机名

2.添加本机的域名解析,修改master和node节点上的/etc/hosts文件,执行如下命令:

[[email protected] ~]# cat <<EOF >>/etc/hosts
192.168.100.6 master01.cluster.k8
192.168.100.7 node01.cluster.k8
192.168.100.8 node02.cluster.k8
EOF

3.关闭防火墙、selinux和swap

1)关闭防火墙
[[email protected]aster01 ~]#  systemctl stop firewalld
[[email protected] ~]#  systemctl disable firewalld
2)禁用selinux
[[email protected] ~]#  setenforce 0  #临时生效
[[email protected] ~]#  sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config  #永久生效(需要重启服务器)
3)关闭交换分区
[[email protected] ~]# swapoff -a
[[email protected] ~]# sed -i ‘s/.*swap.*/#&/‘ /etc/fstab

4.配置内核参数,将桥接的IPv4流量传递到iptables的链中

[[email protected] ~]# cat > /etc/sysctl.d/k8s.conf  <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[[email protected] ~]# sysctl --system

注意:如果配置时出现No such file or directory,简单来说就是执行一下

[[email protected] ~]#  modprobe br_netfilter

5.安装ntpdate,保证集群时间同步

[[email protected] ~]# yum install -y ntpdate
[[email protected] ~]# ntpdate -u ntp.aliyun.com
#可以添加定时任务,进行时钟定时同步
[[email protected] ~]# crontab -e
*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com;/sbin/hwclock -w;

6.其他软件安装

[[email protected] ~]#yum install wget

7.配置yum源

1)配置阿里云的Kubernetes源
[[email protected] ~]#cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2)配置docker源
[[email protected] ~]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

四、安装部署

1、安装docker

[[email protected] ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
# 列出Docker版本
[[email protected] ~]#yum list docker-ce --showduplicates | sort -r
# 安装指定版本
[[email protected] ~]#yum install docker-ce-18.06.3
[[email protected] ~]#systemctl enable docker && systemctl start docker

注意,如果测试环境没有公网ip的情况下,为了保证docker能够正常去拉取镜像,这时就需要为docker配置代理,配置方式如下:

1)直接修改/etc/sysconfig/docker,添加如下内容 (不建议这种方式,这种方式在docker升级或者一些更新操作的时候会导致失效)

HTTP_PROXY="http://[proxy-addr]:[proxy-port]/"
HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/"
export HTTP_PROXY HTTPS_PROXY

2)为docker服务创建一个systemd的目录,并创建docker proxy的代理配置文件,该方式配置后会一直生效
[[email protected] ~]# mkdir -p /etc/systemd/system/docker.service.d

创建/etc/systemd/system/docker.service.d/http-proxy.conf文件,并添加HTTP_PROXY环境变量

[[email protected] ~]#vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

重新加载配置:

 [[email protected] ~]#systemctl daemon-reload

重新启动docker

 [[email protected] ~]#systemctl restart docker

2、在三个节点分别安装kubeadm、kubelet、kubectl

[[email protected] ~]# yum install -y kubeadm、kubelet、kubectl
[[email protected] ~]# systemctl enable kubelet

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具

3、部署master管理节点

[[email protected] ~]# kubeadm init --kubernetes-version=1.15.2 --apiserver-advertise-address=192.168.100.6 --image-repository registry.aliyuncs.com/google_containers --service-cidr=100.64.0.0/10 --pod-network-cidr=10.244.0.0/16

注意:kubeadm在部署的过程中,默认是从k8s.grc.io下载镜像,国内访问会有问题,所以建议通过--image-repository自己来指定国内的镜像仓库,
这里使用阿里云的镜像仓库
如果集群初始化成功,则会返回如下信息

kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga     --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

这些信息是用于将其它node节点加入到Kubernetes集群,在其它node节点上直接执行上边这条命令信息,即可将节点加入到集群。

4、配置集群的管理工具kubectl

[[email protected] ~]#mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config

注意:需要将master节点的/root/.kube/config同时也拷贝到其它node节点,否则在通过kubectl查看集群资源信息时会出现The connection to the server localhost:8080 was refused - did you specify the right host or port?错误。
如果将master节点的/root/.kube/config拷贝到其它node节点后,在其它node节点通过kubectl获取相关集群资源对象信息时出现Unable to connect to the server: Forbidden,请检查一下节点是否配置了https代理,如果需要取消代理。

5、部署node节点

直接节点上执行第三步中集群初始化完成后输出的信息,就可以将节点加入到Kubernetes集群中:

[[email protected] ~]#kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga     --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

此时查看集群的节点信息:

[[email protected] ~]#kubectl get nodes
NAME                STATUS   ROLES    AGE     VERSION
node01.cluster.k8   NotReady    master   5m   v1.15.2
node02.cluster.k8   NotReady    <none>   1m   v1.15.2
node03.cluster.k8   NotReady    <none>   1m   v1.15.2

可以看到集群节点的状态现在还处于NotReady状态,应为现在还没有安装网络插件,主流的网络插件有:flannel、calico、canel等

6、部署flannel网络

[[email protected] ~]#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

部署过程中需要去拉取flannel镜像,可能会稍微慢一点,等部署完成后,在去查看集群状态,可以发现集群节点都已经Ready了。

[[email protected] ~]#kubectl get nodes
NAME                STATUS   ROLES    AGE     VERSION
node01.cluster.k8   Ready    master   15m   v1.15.2
node02.cluster.k8   Ready    <none>   10m   v1.15.2
node03.cluster.k8   Ready    <none>   10m   v1.15.2

这时候我们就可以通过kubectl工具去创建Pod了。

7、为了管理方便,可以为集群部署一个Dashboard

[[email protected] ~]#kubectl apply -f  https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

注意点:

第一:k8s dashboard 的docker镜像默认是从k8s.grc.io下载镜像,国内可能无法访问,所以可以先下载kubernetes-dashboard.yaml到本地,然后修改 docker镜像的仓库地址为阿里云仓库地址。
[[email protected] ~]#wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
#替换镜像仓库
[[email protected] ~]#sed -i ‘s/k8s.gcr.io/registry.aliyuncs.com/google_containers/g‘ kubernetes-dashboard.yaml
第二:在kubernetes-dashboard.yaml中,关于 kubernetes-dashboard的服务(Service)的定义如下:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

默认没有指定spec.type,所以默认类型为ClusterIP,所以导致结果为kubernetes-dashboard服务没有映射本地端口,为能够通过节点IP+端口号的方式访问dashboard,则需要对kubernetes-dashboard.yaml做如下修改:

[[email protected] ~]#sed -i ‘/targetPort:/a\ \ \ \ \ \ nodePort: 30443\n\ \ type: NodePort‘ kubernetes-dashboard.yaml
#修改后,kubernetes-dashboard的服务(Service)的定义如下:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard


重新部署Dashboard

[[email protected] ~]#kubectl delete -f kubernetes-dashboard.yaml
[[email protected] ~]#kubectl apply -f kubernetes-dashboard.yaml

建议使用火狐浏览器Firefox访问Dashboard的地址:https://192.168.100.6:30443

注意:使用其它浏览器可能无法访问, 原因是Kubernetes Dashboard自身证书的问题,所以可以通过自己生成自签签证书来解决这个问题。可以参看:https://blog.51cto.com/10616534/2430512

8、获取登录Dashboard的token(令牌):

#创建一个用于Dashboard访问集群的服务账号dashboard-admin
[[email protected] ~]#kubectl create serviceaccount  dashboard-admin -n kube-system
#将服务账号dashboard-admin和默认的集群角色cluster-admin绑定
[[email protected] ~]#kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
#获取token
[[email protected] ~]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk ‘/dashboard-admin/{print $1}‘)

9、使用token登录Dashboard


认证通过后可以看到如下的Dashboard界面:

10、尝试部署一个pod,并通过Dashboard进行查看

[[email protected] ~]#kubectl create deployment my-nginx --image=nginx

原文地址:https://blog.51cto.com/10616534/2430506

时间: 2024-10-08 15:30:31

centos7基于kubeadm安装部署Kubernetes (1.15.2)集群的相关文章

使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群

手工搭建 Kubernetes 集群是一件很繁琐的事情,所以就产生了很多辅助性安装工具,如 Kubeadm ,Kubespray,RKE 等组件,我最终选择了官方的 Kubeadm 主要是不同的 Kubernetes 版本都有一些差异,Kubeadm 更新与支持的会好一些. Kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,伴随 Kubernetes 每个版本的发布都会同步更新,伴随着 Kubernetes 每次版本

使用kubeadm快速部署Kubernetes(v1.12.1)集群---来源:马哥教育马哥原创

使用kubeadm快速部署Kubernetes(v1.12.1)集群------来源:马哥教育马哥原创 Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 一.主机环境预设 1.测试环境说明 测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware.virtualbo

Centos7安装部署Kubernetes(K8s)集群

Kubernetes集群的安装有多种方式:下载源码包编译安装.下载编译好的二进制包安装.使用kubeadm工具安装等.本文是以二进制文件方式安装Kubernetes集群.系统环境 主机名 IP地址 操作系统 安装组件 k8s-master 192.168.2.212 Centos 7.5 64位 etcd.kube-apiserver.kube-controller-manager.kube-scheduler k8s-node1 192.168.2.213 Centos 7.5 64位 kub

[转帖]centos7 使用kubeadm 快速部署 kubernetes 国内源

centos7 使用kubeadm 快速部署 kubernetes 国内源 https://www.cnblogs.com/qingfeng2010/p/10540832.html 前言 搭建kubernetes时看文档以及资料走了很多弯路,so 整理了最后成功安装的过程已做记录.网上的搭建文章总是少一些步骤,想本人这样的小白总是部署不成功(^_^). 准备两台或两台以上的虚拟机,系统centos7, 本文只准备了两个虚拟机(电脑风扇已转的飞起). 多注意红色加粗的 代码以及文字 ------q

Centos7基于Docker-Compose安装部署AWX

Centos7基于Docker-Compose安装部署AWX AWX提供基于Ansible的Web用户界面.REST API和任务引擎它是 Ansible Tower的上游开源项目. 基础准备: 为了减少安装过程中的问题,可以进行如下暴力的操作 1.关闭防火墙 $systemctl stop firewalld && systemctl disable firewalld #关闭并开机不自启动firewalld 2.关闭SELinux 1)临时关闭:setenforce 02)永久关闭:修

使用ceph-deploy安装部署线上ceph分布式存储集群(centos6.6)

一:CEPH简介 OSDs: Ceph的OSD守护进程(OSD)存储数据,处理数据复制,恢复,回填,重新调整,并通过检查其它Ceph OSD守护程序作为一个心跳 向Ceph的监视器报告一些检测信息.Ceph的存储集群需要至少2个OSD守护进程来保持一个 active + clean状态.(Ceph默认制作2个备份,但你可以调整它) Monitors:Ceph的监控保持集群状态映射,包括OSD(守护进程)映射,分组(PG)映射,和CRUSH映射. Ceph 保持一个在Ceph监视器, Ceph O

Centos 7.5安装部署redis 5.0.0集群

Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.和Memcached类似,但它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set -有序集合)和hash(哈希类型).与Memcached相同的是,为了保证访问效率,数据都是缓存在内存中:与Memcached不同的是,redis会周期性的把更新的数据写入磁盘或者写入追加的记录文件,并且

CentOS7.6 使用ceph-deploy部署mimic 13.2.8集群(一)

一.部署环境规划 1.1 各版本规划如下表 到今目前为止各软件的支持情况  https://docs.ceph.com/docs/master/releases/general/ 1.2 查看磁盘信息 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 50G 0 disk └─vda1 253:1 0 50G 0 part / vdb 253:16 0 20G 0 disk vdc 253:32 0 20G 0 disk vd

使用 kubeadm 安装部署 kubernetes 1.9-部署heapster插件

1.先到外网下载好镜像倒进各个节点 2.下载yaml文件和创建应用 mkdir -p ~/k8s/heapster cd ~/k8s/heapster wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml wget https://raw.githubusercontent.com/kubernetes/heapster/master/d