目录
一、kubernetes核心资源解读
1.Pod
Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定镜像,用来运行具体的服务。Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程
2.Deployment
Replicaset是Kubernetes中的副本控制器,管理Pod,使pod副本的数量始终维持在预设的个数。Deployment是管理Replicaset和Pod的副本控制器,Deployment可以管理多个Replicaset,是比Replicaset更高级的控制器,也即是说在创建Deployment的时候,会自动创建Replicaset,由Replicaset再创建Pod,Deployment能对Pod扩容、缩容、滚动更新和回滚、维持Pod数量。
3.label
label是标签的意思,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等,一个资源可以绑定任意多个label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象,例如创建一个 Pod,给定一个 Label是app=tomcat,那么service可以通过label selector选择拥有app=tomcat的pod,和其相关联,也可通过 app=tomcat 删除拥有该标签的 Pod 资源。
4.service
在kubernetes中,Pod是有生命周期的,如果Pod重启IP很有可能会发生变化。如果我们的服务都是将Pod的IP地址写死,Pod的挂掉或者重启,和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod,为了解决这个问题,在kubernetes中定义了service资源对象,Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。
二、布置kubernetes基础环境
1.实验环境规划
操作系统:centos7.5
配置:4G内存/2vCPU/100G硬盘
网络:NAT
K8S集群角色 IP 主机名 安装的组件 控制节点 192.168.1.11 hd1.com apiserver controller-manager
scheduler etcd kube-proxy docker calico
工作节点 192.168.1.12 hd2.com kubelet kube-proxy
docker calico coredns
工总节点 192.168.1.13 hd3.com kubelet kube-proxy
docker calico coredns
2.修改机器IP,变成静态IP
在三台主机上的/etc/sysconfig/network-scripts/ifcfg-ens33文件中更改配置
添加以下内容即可
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33 #对应本机网卡设备名
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.11 #对应各个主机ip
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2
修改配置文件后需要重启网络服务才能使配置生效
[root@hd1 ~]# systemctl restart network
3.配置主机名及hosts文件,相互之间通过主机名互相访问
在192.168.1.11上执行如下:
hostnamectl set-hostname hd1.com && bash
在192.168.1.12上执行如下:
hostnamectl set-hostname hd2.com && bash
在192.168.1.13上执行如下:
hostnamectl set-hostname hd3.com && bash
修改每台机器的/etc/hosts文件,增加以下三行
192.168.1.11 hd1.com
192.168.1.12 hd2.com
192.168.1.13 hd3.com
使用ping命令对三台机器测试
4.配置主机之间无密码登录
把本地生成的秘钥文件和私钥文件拷贝到远程主机
#三台主机做一样的操作
[root@hd1 ~]# ssh-keygen #一直回车,不输入密码
[root@hd1 ~]# ssh-copy-id hd1.com
[root@hd1 ~]# ssh-copy-id hd2.com
[root@hd1 ~]# ssh-copy-id hd3.com
5.关闭交换分区swap,提升性能
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定--ignore-preflight-errors=Swap来解决。
[root@hd1 ~]# swapoff -a #临时关闭
[root@hd2 ~]# swapoff -a
[root@hd3 ~]# swapoff -a
#永久关闭,注释swap挂载即可
[root@hd1 ~]# sed -i '/swap/s/\//\#\//g' /etc/fstab
6.修改主机内核参数
三台机器操作相同
[root@hd1 ~]# modprobe br_netfilter
[root@hd1 ~]# echo "modprobe br_netfilter" >> /etc/profile
[root@hd1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1 #搭建网络桥接
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 #添加路由
EOF
[root@hd1~]# sysctl -p /etc/sysctl.d/k8s.conf # -P从指定的文件加载系统参数
7.关闭firewalld防火墙及selinux
三台主机操作相同
[root@hd1 ~]# systemctl stop firewalld;systemctl disable firewalld
[root@hd1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#修改selinux配置文件之后,重启机器,selinux配置才能永久生效
[root@hd1 ~]#getenforce
Disabled
#显示Disabled说明selinux已经关闭
8. 配置阿里云的repo源
三台主机操作相同
安装rzsz命令
[root@hd1 ~]# yum install lrzsz -y
安装scp:
[root@hd1 ~]#yum install openssh-clients
#备份基础repo源
[root@hd1 ~]# mkdir /root/repo.bak
[root@hd1 ~]# cd /etc/yum.repos.d/
[root@hd1 ~]# mv * /root/repo.bak/
#下载阿里云的repo源
[root@hd1 ~]#wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo
#配置国内阿里云docker的repo源
[root@hd1 ~]# yum -y install yum-utils
[root@hd1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#配置epel源
[root@hd1 ~]#yum -y install epel-release
9.配置安装k8s组件需要的阿里云的repo源
[root@hd1 ~]#vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=kubernetes-yum-repos-kubernetes-el7-x86_64
enabled=1
gpgcheck=0
#将hd1.com上Kubernetes的repo源复制给hd2.com和hd3.com
[root@hd1 ~]# scp /etc/yum.repos.d/kubernetes.repo hd2.com:/etc/yum.repos.d/
[root@hd1 ~]# scp /etc/yum.repos.d/kubernetes.repo hd3.com:/etc/yum.repos.d/
10.配置时间同步
三台主机操作相同
#安装ntpdate命令
[root@hd1 ~]# yum install ntpdate -y
#跟网络时间做同步
[root@hd1 ~]# ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@hd1 ~]# crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
#重启crond服务
[root@hd1 ~]#service crond restart
11.开启IPVS
#把ipvs.modules上传到hd1.com机器的/etc/sysconfig/modules/目录下
[root@hd1.com]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
#把ipvs.modules拷贝到hd2.com的/etc/sysconfig/modules/目录下
[root@hd1.com ~]#scp /etc/sysconfig/modules/ipvs.modules hd2.com:/etc/sysconfig/modules/
#把ipvs.modules拷贝到hd3.com的/etc/sysconfig/modules/目录下
[root@hd1.com ~]# scp /etc/sysconfig/modules/ipvs.modules hd3.com:/etc/sysconfig/modules/
[root@hd2.com]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
[root@hd3.com]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
12.安装基础软件包
三台主机相同操作
[root@hd1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat conntrack ntpdate telnet ipvsadm