kubernetes yum安装

##Kubernetes部署 旧版

Kubernetes集群组件:

  • etcd 一个高可用的K/V键值对存储和服务发现系统
  • flannel 实现跨主机的容器网络的通信
  • kube-apiserver 提供kubernetes集群的API调用
  • kube-controller-manager 确保集群服务
  • kube-scheduler 调度容器,分配到Node
  • kubelet 在Node节点上按照配置文件中定义的容器规格启动容器
  • kube-proxy 提供网络代理服务,将service与pod打通。
查看版本

在官网上查看最新版本v1.19.0-rc.4
https://github.com/kubernetes/kubernetes/tags

查看操作系统

[root@master~]# cat /etc/redhat-release
CentOS Linux 7.4.1708 (Core)

[root@master~]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017

修改IP地址、主机名和host解析
节点及功能主机名IP
master、etcd、registrymaster192.168.11.10
node1node1192.168.11.11
node2node2192.168.11.12

#查询并修改主机名,重启生效
[root@master~]# hostname
[root@master~]# vi /etc/hostname 或 hostnamectl set-hostname master
master

#修改IP和所有主机名的映射关系(所有机器)
[root@master~]# vi /etc/hosts
192.168.11.10 master
192.168.11.11 node1
192.168.11.12 node2

[root@master ~]# systemctl restart network 或 reboot

虚拟机NAT网络设置
在这里插入图片描述

节点上的其他设置

1.1 确保系统已经安装epel-release源
RedHat系列的包管理工具是yum
[root@master ~]# yum -y install epel-release

1.2 关闭三台机器上的防火墙
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service

[root@master ~]# setenforce 0 && sed -i ‘s/^SELINUX=.*/SELINUX=disabled/’ /etc/selinux/config

[root@master ~]# swapoff -a && sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab

设置固定的IP地址
[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

[root@master manifests]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="58fbb6d0-e33a-425e-b863-0681c854bc8b"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.11.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.11.2"
DNS1="8.8.8.8"
DNA2="8.8.4.4"

#dns
[root@node2 rc.d]# cat /etc/resolv.conf 
# Generated by NetworkManager
# nameserver 8.8.8.8
# nameserver 8.8.4.4
卸载docker 旧版本

卸载Docker Engine,CLI和Containerd软件包,并删除数据
#主机上的镜像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷。
您必须手动删除所有已编辑的配置文件。
[root@node1 ~]# yum list installed | grep docker
[root@node1 ~]# yum remove docker.x86_64 docker-client.x86_642 docker-common.x86_642
#取消挂载
[root@node1 ~]# umount /var/lib/docker/containers
[root@node1 ~]# umount /var/lib/docker/overlay2

#清空docker产生的文件
[root@node1 ~]# rm -rf /var/lib/docker && rm -rf /etc/docker

安装 kubernetes-master

使用 yum 安装 etcd 和 kubernetes-master

查看版本

[root@master hello]# yum list|grep kubernetes
[root@master hello]# yum list installed | grep kubernetes
kubernetes-client.x86_64 1.5.2-0.7.git269f928.el7 @extras
kubernetes-master.x86_64 1.5.2-0.7.git269f928.el7 @extras

安装etcd

[root@master ~]# yum install etcd -y

编辑 etcd 配置文件

[root@master ~]# vim /etc/etcd/etcd.conf   

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"  #etcd节点与客户端通信时所监听的地址列表
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.11.10:2379"  #etcd集群通信所监听节点地址和端口

设置开机启动
[root@master ~]# systemctl enable etcd.service
[root@master ~]# systemctl start etcd.service

测试etcd是否安装成功
[root@master ~]# etcdctl set testdir/testkey0 0
0
[root@master ~]# etcdctl get testdir/testkey0
0

检查健康状态
[root@master ~]# etcdctl -C http://192.168.11.10:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.11.10:2379
cluster is healthy

master节点 在etcd中定义flannel网络

Flannel要用etcd存储自身一个子网信息,所以要保证能成功连接Etcd,写入预定义子网段。

##在master节点安装key
[root@master ~]# etcdctl mk /atomic.io/network/config ‘{“Network”:“172.17.0.0/16”}’
{“Network”:“172.17.0.0/16”}

#查看是否添加成功
[root@master ~]# etcdctl get /atomic.io/network/config
{“Network”:“172.17.0.0/16”}

master节点 安装kubernetes-master

[root@master ~]# yum install kubernetes-master -y

编辑 /etc/kubernetes/apiserver 文件

[root@master ~]#  vim /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

ps:测试时需要把KUBE_ADMISSION_CONTROL中的SecurityContextDeny和ServiceAccount去掉,这是权限相关的

安装 flannel 网络

检查flannel版本
[root@master ~]# yum list |grep flannel
flannel.x86_64 0.7.1-9.el7 @extras

在所有节点安装并修改flanneld网络相关信息

[root@master ~]# yum install flannel -y
[root@master ~]# sed -i ‘s#http://127.0.0.1:2379#http://192.168.11.10:2379#g’ /etc/sysconfig/flanneld
[root@node-1 ~]# yum install flannel -y
[root@node-1 ~]# ]# sed -i ‘s#http://127.0.0.1:2379#http://192.168.11.10:2379#g’ /etc/sysconfig/flanneld
[root@node-2 ~]# yum install flannel -y
[root@node-2 ~]# sed -i ‘s#http://127.0.0.1:2379#http://192.168.11.10:2379#g’ /etc/sysconfig/flanneld

FLANNEL_ETCD:ETCD的地址
FLANNEL_ETCD_KEY:etcd中配置的网络参数的key 
FLANNEL_OPTIONS:是flannel的启动参数,在这里可以加上监听的网卡,如–iface=ens33

启动flannel服务

flannel服务启动时主要做了以下几步的工作:
1.从etcd中获取network的配置信息。
2.划分subnet,并在etcd中进行注册。
3.将子网信息记录到/run/flannel/subnet.env中

所有节点安装docker

[root@master ~]# yum install docker -y

3.5 修改docker网络

启动服务

启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服务,并设置开机启动。

[root@master ~]# systemctl enable flanneld.service
[root@master ~]# systemctl enable docker
[root@master ~]# systemctl enable kube-apiserver kube-scheduler kube-controller-manager
[root@master ~]# systemctl start kube-apiserver kube-scheduler kube-controller-manager

启动顺序

[root@master ~]# systemctl start etcd
[root@master ~]# systemctl restart flanneld.service
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl restart kube-apiserver.service
[root@master ~]# systemctl restart kube-controller-manager.service
[root@master ~]# systemctl restart kube-scheduler.service

检查是否生效

确保docker0与flannel0在同一网段。

[root@master ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:e5:0a:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.10/24 brd 192.168.11.255 scope global dynamic ens33
       valid_lft 1571sec preferred_lft 1571sec
    inet6 fe80::20c:29ff:fee5:a47/64 scope link 
       valid_lft forever preferred_lft forever
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
    link/none 
    inet 172.17.63.0/16 scope global flannel0
       valid_lft forever preferred_lft forever
    inet6 fe80::3ff4:7f41:553b:d583/64 scope link flags 800 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:30:49:69:8f brd ff:ff:ff:ff:ff:ff
    inet 172.17.63.1/24 scope global docker0
       valid_lft forever preferred_lft forever

查看启动的docker是否被flannel托管:如果有–bip=172.17.45.1/24(xxxx) ,说明Flannel管理了Docker
可以看到docker启动后被加上了flanneld的相关配置项了(bip, ip-masq 和 mtu)
https://blog.csdn.net/yelllowcong/article/details/78303626

[root@master ~]# ps -ef|grep docker  或  ps aux | grep docker
root       1290      1  0 01:05 ?        00:00:59 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2 --bip=172.17.63.1/24 --ip-masq=true --mtu=1472
root       1295   1290  0 01:05 ?        00:00:40 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true

[root@master ~]# hostname -I
192.168.11.10 172.17.63.0 172.17.63.1

测试不同节点互通,在当前节点访问另一个Node节点docker0 IP
[root@master ~]# ping 172.17.63.1/24
如果能通说明Flannel部署成功。如果不通检查下日志:journalctl -u flannel

因master防火墙端口问题导致启动失败,node错误信息如下
https://blog.csdn.net/wangshuminjava/article/details/89913701

2 node节点 安装Kubernetes

1.使用yum安装 flannel 和 kubernetes-node
[root@master ~]# yum -y install flannel kubernetes-node

kubeconfig文件用于kubelet连接master apiserver

kubelet 配置文件修改

[root@node1 ~]# vi /etc/kubernetes/config

KUBE_MASTER="–master=http://192.168.11.10:8080"

kubelet 核心文件修改

[root@node1 ~]# vi /etc/kubernetes/kubelet
KUBELET_HOSTNAME="–hostname-override=node1"
KUBELET_API_SERVER="–api-servers=http://192.168.11.10:8080"

搭建完成

在master节点查看 node状态,如下信息表示环境搭建成功

[root@master ~]# kubectl get nodes
NAME            STATUS     AGE
192.168.11.11   NotReady   2h
192.168.11.12   NotReady   2h

查看k8s版本

[root@master hello]# kubectl --version
Kubernetes v1.5.2

[root@master ~]# kubectl version
使用kubectl version 命令,输出的信息会显示client和server的版本信息,client代表kubectl版本信息,server代表的是master节点的k8s版本信息

[root@master ~]# kubectl api-versions

#查看命名空间
[root@master ~]# kubectl get ns
#查看flannel 版本 0.7.1
[root@master ~]# flanneld --version
#查看docker版本 1.13.1
[root@master ~]# docker version

小结

完成安装

7.发布SpringBoot服务

7.1 创建pod : nginx-pod.yaml
kubectl create -f nginx-pod.yaml
。。。。。。

相关错误

报错 i/o time out 未关闭防火墙
【K8s开启防火墙】Failed to list *v1.Endpoints: Get https://10.96.0.1:443/api/v1/endpoints

[root@node1 ~]# systemctl status flanneld.service
● flanneld.service - Flanneld overlay address etcd agent
   Loaded: loaded (/usr/lib/systemd/system/flanneld.service; enabled; vendor preset: disabled)
   Active: activating (start) since 四 2020-07-30 17:13:02 CST; 5s ago
 Main PID: 4112 (flanneld)
   Memory: 18.4M
   CGroup: /system.slice/flanneld.service
           └─4112 /usr/bin/flanneld -etcd-endpoints=http://192.168.11.10:2379 -etcd-prefix=/atomic.io/network

7月 30 17:13:02 node1 systemd[1]: flanneld.service holdoff time over, scheduling restart.
7月 30 17:13:02 node1 systemd[1]: Starting Flanneld overlay address etcd agent...
7月 30 17:13:02 node1 flanneld-start[4112]: I0730 17:13:02.254542    4112 main.go:132] Installing signal handlers
7月 30 17:13:02 node1 flanneld-start[4112]: I0730 17:13:02.254755    4112 manager.go:136] Determining IP address of default interface
7月 30 17:13:02 node1 flanneld-start[4112]: I0730 17:13:02.262847    4112 manager.go:149] Using interface with name ens33 and address 192.168.11.11
7月 30 17:13:02 node1 flanneld-start[4112]: I0730 17:13:02.262895    4112 manager.go:166] Defaulting external address to interface address (192.168.11.11)
7月 30 17:13:03 node1 flanneld-start[4112]: E0730 17:13:03.266076    4112 network.go:102] failed to retrieve network config: client: etcd cluster is unavailable or misconfigur... i/o timeout
7月 30 17:13:05 node1 flanneld-start[4112]: E0730 17:13:05.269109    4112 network.go:102] failed to retrieve network config: client: etcd cluster is unavailable or misconfigur... i/o timeout
7月 30 17:13:07 node1 flanneld-start[4112]: E0730 17:13:07.271349    4112 network.go:102] failed to retrieve network config: client: etcd cluster is unavailable or misconfigur... i/o timeout
Hint: Some lines were ellipsized, use -l to show in full.

Kubernetes 介绍

Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构。

使用Kubernetes,您可以快速高效地响应客户需求:

快速,可预测地部署应用程序。
在运行中扩展应用程序。
无缝推出新功能。
仅使用您需要的资源来优化硬件的使用。
我们的目标是建立一个组件和工具的生态系统,以减轻在公共云和私有云中运行应用程序的负担。

Kubernetes是:
Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器。 

主要功能如下:

1)将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。

2)使用编排系统(YAML File)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题

3)自动管理和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭,那么,会尝试重启或重新分配容器,始终保证会有十个容器在运行,反而杀死多余的。

kubernetes角色组成:

1)Pod 是kubernetes的最小操作单元,一个Pod可以由一个或多个容器组成;同一个Pod只能运行在同一个主机上,共享相同的volumes、network、namespace;

2)ReplicationController(RC)

RC用来管理Pod,一个RC可以由一个或多个Pod组成,在RC被创建后,系统会根据定义好的副本数来创建Pod数量。在运行过程中,如果Pod数量小于定义的,就会重启停止的或重新分配Pod,反之则杀死多余的。当然,也可以动态伸缩运行的Pods规模。

RC通过label关联对应的Pods,在滚动升级中,RC采用一个一个替换要更新的整个Pods中的Pod。

3)Service 定义了一个Pod逻辑集合的抽象资源,Pod集合中的容器提供相同的功能。集合根据定义的Label和selector完成,当创建一个Service后,会分配一个Cluster IP,这个IP与定义的端口提供这个集合一个统一的访问接口,并且实现负载均衡。

4)Label 用于区分Pod、Service、RC的key/value键值对; 

Pod、Service、RC可以有多个label,但是每个label的key只能对应一个;

主要是将Service的请求通过lable转发给后端提供服务的Pod集合;

kubernetes组件组成:

1)kubectl 客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口。

2)kube-apiserver 作为整个系统的控制入口,以REST API服务提供接口。

3)kube-controller-manager 用来执行整个系统中的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。

4)kube-scheduler 负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。

5)etcd 负责节点间的服务发现和配置共享。

6)kube-proxy 运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。

7)kubelet 运行在每个计算节点上,作为agent,接受分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。

8)DNS 一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

认识kubernetes架构及应用场景

1.k8s在企业中应用场景?
a.k8s构造一套自动化的运维平台,充分利用服务器资源,降本增效
b.充分利用服务器资源(容器)
c.服务无缝迁移

2、服务部署模式变迁及服务部署变化的问题思考?

1.服务部署模式是如何变迁的?
物理机部署(直接部署在物理机上)
2.虚拟化(虚拟机)方式,达到分割物理机资源的作用,充分利用服务器资源
3.容器化的方式部署(云原生)

服务部署模式变迁产生的服务部署变化?

思考:SOA架构、微服务架构模式下,服务拆分越来越多,部署维护的服务越来越多,不好管理。

  • 虚拟化(虚拟机)方式,使用OpenStack可视化的方式管理
  • 容器化方式部署(k8s管理)更轻量级虚拟机

面临的问题:微服务架构模式下,服务越来越多:
*如何进行横向扩展(加机器?)。
*容器宕机怎么办
*数据怎么恢复
*如何发版、更新且不影响业务(k8s滚动更新)
*如何监控容器
*容器如何调度创建?数据安全性如何保证。

云架构&云原生

云架构

IaaS 基础设施即服务
用户:租用(购买|分配权限)云主机,用户就不需要考虑网络,存储,DNS,硬件环境方面的问题。
运营商:提供网络、存储、DNS,这样的服务就叫做基础设施服务
PaaS 平台即服务:MySQL、ES、MQ等
SaaS 钉钉软件
Serverless 无服务模式:站在用户角度 sever less
用户只需要云服务器,在云服务器所有的基础环境,软件环境都不需要用户考虑。

云原生

一句话就是为了让应用服务项目软件,都运行在云上的解决方案
特点:容器化、微服务、CI\CD可持续交付扩展、DevOps开发运维

k8s架构基本原理

Kubernetes是一个开源容器协调器,由Google使用GO语言开发,用于管理在容器环境中运行的应用程序。

集群特点:K8s集群 Master Node1 Node2

master:192.168.11.10 服务:apiserver, controller-manager, scheduler,etcd

node1:192.168.11.11 服务:flannel, docker, kubelet, kube-proxy
node1:192.168.11.12 服务:flannel, docker, kubelet, kube-proxy

Master节点

Master节点:只负责调度、网关、控制器、资源对象存储
API Server、Scheduler、Controller Manager、Etcd

API Server

API Server 是k8s网关,所有请求都经过api server

Scheduler

Scheduler 调度器,把请求调度到某个服务器

Controller Manager

Controller Manager 控制器,维护K8s资源对象,CRUD添加、修改、删除、查询

Etcd

Etcd 存储资源对象,做服务注册与发现

NODE节点

Node节点扫描Etcd,获取相关数据信息

docker 容器引擎
kubelet 操作本地的容器维护,如CRUD。在每一个node节点都存在一份,在node节点上的资源操作指令由kubelet执行。

kube-proxy 代理服务,负载均衡

Fluentd 日志收集服务
pod 是K8s管理的基本单元,pod内部是容器,K8s不直接操作容器,而是管理Pod。
容器存储在Node节点下的Pod内部

深入认识kubernetes核心组件及原理

pod核心原理

POD是什么

pod是一个虚拟化资源对象,有独立的IP地址和主机名hostname,Pod用namespace进行资源隔离。相当于一台独立的沙箱。
pod是一个容器组,pod容器中装载的是docker创建的容器。
Pod在系统中是一个进程

https://www.cnblogs.com/xkops/p/6169034.html

参考资料

https://www.cnblogs.com/wangyongqiang/articles/12564373.html

使用flannel配置docker网络
https://blog.csdn.net/liumiaocn/article/details/88839952

Kubernetes部署(一):架构及功能说明
https://blog.51cto.com/billy98/2334654

Kubernetes核心概念总结
https://www.cnblogs.com/zhenyuyaodidiao/p/6502171.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值