kubernetes的安装和使用

1 kubernetes介绍

1.1 kubernetes功能

自动装箱

  • 基于容器对应用运行环境的资源配置要求自动部署应用容器

自我修复(自愈能力)

  • 当容器失败时,会对容器进行重启
  • 当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
  • 当容器未通过监控检查时,会关闭此容器
  • 直到容器正常运行时,才会对外提供服务

水平扩展

  • 通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁

服务发现

  • 用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡

滚动更新

  • 可以根据应用的变化,对应用容器运行的应用,进行一
    次性或批量式更新

版本回退

  • 可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

密钥和配置管理

  • 在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

存储编排

  • 自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
  • 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder等)、公共云存储服务等

1.2 kubernetes架构

应用部署分类

无中心节点架构

  • GlusterFS

有中心节点架构

  • HDFS
  • K8S

节点角色功能

Master Node

  • k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
  • Master Node由API Server、Scheduler、Cluster State Store(ETCD数据库)和Controller MangerServer所组成;

Worker Node

  • 集群工作节点,运行用户业务应用容器;
  • Worker Node包含kubelet、kube proxy和ContainerRuntime;

1.3 kubernetes组件

1.3.1 NameSpace

  • 命名空间
  • 作用:多租户情况下,实现资源隔离
  • 属于逻辑隔离
  • 属于管理边界
  • 不属于网络边界
  • 可以针对每个namespace做资源配额

1.3.2 pod

  • Pod是kubernetes集群能够调度的最小单元
  • Pod是容器的封装

1.3.3 controller

  • 控制器
  • 用于对应用运行的资源对象进行监控
  • 当Pod出现问题时,会把Pod重新拉起,以达到用户的期望状态

常见的controller控制器

控制器名称 作用
Deployment 声明式更新控制器,用于发布无状态应用
ReplicaSet 副本集控制器,用于对Pod进行副本规模 扩大或剪裁
StatefulSet 有状态副本集,用于发布有状态应用
DaemonSet 在k8s集群每一个Node上运行一个副本, 用于发布监控或日志收集类等应用
Job 运行一次性作业任务
CronJob 运行周期性作业任务

Deployment控制器介绍

  • 具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能
  • Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用
    Deployment而不直接使用Replica Set 。

1.3.4 Service

Service介绍

  • 不是实体服务
  • 是一条iptables或ipvs的转发规则

Service作用

  • 通过Service为pod客户端提供访问pod方法,即客户端访问pod入口
  • Service通过Pod标签与Pod进行关联

Service类型

  • ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
  • NodePort:在每个Node上分配一个端口作为外部访问入口
  • LoadBalancer:工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
  • ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

Service参数

  • port 访问service使用的端口
  • targetPort Pod中容器端口
  • NodePort 通过Node实现外网用户访问k8s集群内service(30000-32767)

Service创建

  • Service的创建在工作中有两种方式,一是命令行创建,二是通过资源清单文件YAML文件创建

2 kubernetes安装

2.1 系统说明

主机名称 IP地址 安装的软件
k8s-master 192.168.0.1 kube-apiserver、kube-controller-manager、kube-scheduler、docker、etcd、calico
k8s-node1 192.168.0.2 kubelet、kubeproxy、docker
k8s-node2 192.168.0.3 kubelet、kubeproxy、docker

2.2 集群安装

2.2.1 三台机器都需要操作的步骤

1.修改hostname及hosts文件

#自改hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1 
hostnamectl set-hostname k8s-node2

#修改hosts文件
vim /etc/hosts
#追加内容
192.168.66.101 k8s-master 
192.168.66.102 k8s-node1
192.168.66.103 k8s-node2

**2.**安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wgetvimnet-tools git

3.设置防火墙为 Iptables 并设置空规则

#关闭防火墙
systemctl  stop firewalld  &&  systemctl  disable firewalld

#设置空规则
yum -y install iptables-services  &&  systemctl  start iptables  &&  systemctl  enable iptables&&  iptables -F  &&  service iptables save

4.关闭防火墙和关闭SELinux

#临时关闭SELinux
setenforce 0 

#永久关闭SELinux
vi /etc/sysconfig/selinux 
#修改内容
SELINUX=disabled

5.设置系统参数

设置允许路由转发,不对bridge的数据进行处理

#创建文件
vi /etc/sysctl.d/k8s.conf
#内容
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 
net.ipv4.tcp_tw_recycle = 0
vm.swappiness = 0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory = 1 # 不检查物理内存是否够用
vm.panic_on_oom = 0 # 开启 OOM
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 2310720

执行文件

sysctl -p /etc/sysctl.d/k8s.conf

6.调整系统时区

# 设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai

# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0

# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

7.关闭不需要服务

systemctl stop postfix && systemctl disable postfix

8.kube-proxy开启ipvs的前置条件

vim /etc/sysconfig/modules/ipvs.modules
#内容
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

#执行命令
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

9.所有节点关闭swap

#临时关闭
swapoff -a 

#永久关闭
vi /etc/fstab 
#注释掉以下字段
/dev/mapper/cl-swap swap swap defaults 0 0

10.设置 rsyslogd 和 systemd journald

mkdir /var/log/journal 
# 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d

#编辑文件
vim /etc/systemd/journald.conf.d/99-prophet.conf
#内容
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值