kubernets(k8s)安装配置
文章目录1. 简单介绍1.1 概述1.2Kubernets对象2 安装2.1 环境介绍2.2 配置yum源2.3 安装配置软件2.3.1 etcd节点软件安装软件配置启动并测试配置etcd,制定容器云中docker的ip网段2.3.2 master节点软件安装修改Kubernets配置文件修改apiserver配置文件修改kube-controller-manager配置文件修改kube-sche
1. 简单介绍
Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资
源调度、均衡容灾、服务注册、动态扩缩容等功能套件 的基于容器的云平台
官网:https://kubernetes.io/
1.1 概述
如果想使用kubernetes API对象来描述集群的预期状态(desired state):包括你需要运行的应用或者负载,它们使用的镜像、副本数,以及所需网络和磁盘资源等等。你可以使用命令行工具kubectl来调用kubernets API创建对象,通过所创建的这些对象来配置预期状态。也可以用Kubernets PI和集群进行交互,设置或者修改预期状态。
- kubernets主控组件(master)包含三个进程,都运行在集群中的某个节点上,通常这个节点称为master节点。这些进程包括:kube-apiserver、kube-controller-manager和kube-scheduler
- 集群中的每个非master节点都运行两个进程:
- kubelet:和master节点进行通信
- kube-peoxy:一种网络代理,讲Kubernets的网络服务代理到每个节点上
1.2Kubernets对象
Kubernets包含若干个抽象概念用来表示系统状态,包括:已部署的容器化应用和负载、与它们相关的网络和磁盘资源以及有关集群正在运行的其他操作的信息
基本的Kubernets对象包括:
- Pod:pod是Kubernets项目中最小的API对象。也就是说是Kubernets项目的原子调度单位,一个pod可能包含一个或多个容器
- Service:Kubernets之所以需要Service,一方面是应为Pod的IP不是固定的,另一方面则是应为一组POd实例之间总会有负载均衡的需求。service使用lable识别pod
- Volume:用于同一pod内的容器进行数据共享等
- Namespace:是对一组资源和对象的抽象集合,与编程中的namespace类似都是命名空间
另外,Kubernets包含大量的被称作控制器(controllers)的高级抽象。控制器给予基本对象构建并提供额外的功能和方便使用的特性,包括
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job
2 安装
2.1 环境介绍
hostname | IP | CPU | 内存 |
---|---|---|---|
master | 192.168.1.100 | 4 | 2G |
etcd | 192.168.1.200 | 4 | 2G |
node1 | 192.168.1.101 | 4 | 2G |
node2 | 192.168.1.102 | 4 | 2G |
2.2 配置yum源
这里配置的是阿里云的yum源(在每台机器上都执行)
yum -y install wget
cd /etc/yum.repos.d/
# 备份系统自带的yum源
mkdir repo_bak
mv *.repo repo_bak/
# 下载yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清空缓存
yum clean all
# 下载扩展源
yum -y install epel-release
yum clean all
2.3 安装配置软件
先关闭防火墙,线上业务根据实际情况允许访问(在每台机器上都执行)
systemctl stop firewalld && systemctl disable firewalld
2.3.1 etcd节点
软件安装
# 安装软件
yum -y install kubernetes flannel ntp etcd
# 修改hosts文件
echo -e "192.168.1.100 master\n192.168.1.200 etcd\n192.168.1.101 node1\n192.168.1.102 node2\n" >> /etc/hosts
软件配置
vim /etc/etcd/etcd.conf
# etcd存储数据的目录
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
# etcd对外监听地址,默认为2379
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.1.200:2379"
# etcd 节点名称
ETCD_NAME="etcd"
# 用来发送通知
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.200:2379"
启动并测试
systemctl start etcd
systemctl status etcd
systemctl enable etcd
查看端口号
netstat -anutp|grep 2379
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 14157/etcd
tcp 0 0 127.0.0.1:32810 127.0.0.1:2379 ESTABLISHED 14157/etcd
tcp 0 0 127.0.0.1:2379 127.0.0.1:32810 ESTABLISHED 14157/etcd
查看etcd成员(这里只有一台)
etcdctl member list
8e9e05c52164694d: name=etcd peerURLs=http://localhost:2380 clientURLs=http://192.168.1.200:2379 isLeader=true
配置etcd,制定容器云中docker的ip网段
etcdctl mkdir /k8s/network
etcdctl set /k8s/network/config '{"Network":"10.1.0.0/16"}'
etcdctl get /k8s/network/config
{"Network":"10.1.0.0/16"}
命令介绍
backup backup an etcd directory
cluster-health check the health of the etcd cluster
mk make a new key with a given value
mkdir make a new directory
rm remove a key or a directory
rmdir removes the key if it is an empty directory or a key-value pair
get retrieve the value of a key
ls retrieve a directory
set set the value of a key
setdir create a new directory or update an existing directory TTL
update update an existing key with a given value
updatedir update an existing directory
watch watch a key for changes
exec-watch watch a key for changes and exec an executable
member member add, remove and list subcommands
user user add, grant and revoke subcommands
role role add, grant and revoke subcommands
auth overall auth controls
2.3.2 master节点
软件安装
# 安装软件
yum -y install kubernetes flannel ntp
# 修改hosts文件
echo -e "192.168.1.100 master\n192.168.1.200 etcd\n192.168.1.101 node1\n192.168.1.102 node2\n" >> /etc/hosts
修改Kubernets配置文件
grep -E "^#|^$" /etc/kubernetes/config -v
# 表示错误日志记录到文件还是输出到stderr标准错误输出
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志等级
KUBE_LOG_LEVEL="--v=0"
# 是否允许运行特权容器 默认不允许
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.1.100:8080"
修改apiserver配置文件
grep -E "^#|^$" /etc/kubernetes/apiserver -v
# 监听的接口,如果配置为127.0.0.1则只监听localhost,配置为0.0.0.0会监听所有接口,这里配置为0.0.0.0
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# etcd的服务地址
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.200:2379"
# Kubernets可以分配的ip的范围,Kubernets启动的每一个pod以及service都会分配一个ip地址,将从这个范围中分配ip
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# 这里不是线上环境,不做任何限制,默认情况下会先经过认证和授权,然后执行准入操作,最后对目标对象进行操作
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
KUBE_API_ARGS=""
修改kube-controller-manager配置文件
默认配置即可
修改kube-scheduler配置文件
grep -E "^#|^$" /etc/kubernetes/scheduler -v
# 监听地址,默认为127.0.0.1
KUBE_SCHEDULER_ARGS="0.0.0.0"
配置flanneld服务
grep -E "^#|^$" /etc/sysconfig/flanneld -v
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.200:2379"
# 与etcd中的Network一致
FLANNEL_ETCD_PREFIX="/k8s/network"
# 指定通信的物理网卡
FLANNEL_OPTIONS="--iface=ens33"
启动服务并查看
# 启动服务
systemctl start flanneld.service
# 查看启动状态
systemctl status flanneld.service
查看网卡信息
ifconfig
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 10.1.80.0 netmask 255.255.0.0 destination 10.1.80.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看子网信息
cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.1.0.0/16
FLANNEL_SUBNET=10.1.80.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
重启master上的四个服务并设置开机自启动
systemctl restart kube-apiserver.service kube-controller-manager.service kube-scheduler.service flanneld.service
# 开机自启动
systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service flanneld.service
2.3.3 node(1、2)节点
软件安装
# 安装软件
yum -y install kubernetes flannel ntp
# 修改hosts文件
echo -e "192.168.1.100 master\n192.168.1.200 etcd\n192.168.1.101 node1\n192.168.1.102 node2\n" >> /etc/hosts
flanneld服务配置
grep -E "^#|^$" /etc/sysconfig/flanneld -v
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.200:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"
配置master地址
grep -E "^#|^$" -v /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.1.100:8080"
配置kube-proxy
默认不用配置
配置kubelet
grep -E "^#|^$" /etc/kubernetes/kubelet -v
# 用来使用kubectl远程连接kubelet服务上,如果为127.0.0.1则无法连接kublet服务
KUBELET_ADDRESS="--address=0.0.0.0"
# node节点名称,便于标识
# KUBELET_HOSTNAME="--hostname-override=node2"
KUBELET_HOSTNAME="--hostname-override=node1"
# 指定apiserver地址
KUBELET_API_SERVER="--api-servers=http://192.168.1.100:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
关闭selinux(或使用更高版本的系统)
vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'
错误信息
journalctl -xe
Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)
启动node服务
systemctl restart flanneld.service kube-proxy.service kubelet.service docker.service
systemctl enable flanneld.service kube-proxy.service kubelet.service docker.service
systemctl status flanneld.service kube-proxy.service kubelet.service docker.service
查看网卡信息
ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.1.49.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether 02:42:81:18:60:61 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 10.1.49.0 netmask 255.255.0.0 destination 10.1.49.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看kube-proxy
netstat -anutp|grep proxy
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 18040/kube-proxy
tcp 0 0 192.168.1.101:46368 192.168.1.100:8080 ESTABLISHED 18040/kube-proxy
tcp 0 0 192.168.1.101:46370 192.168.1.100:8080 ESTABLISHED 18040/kube-proxy
3 遇见的问题
3.1 pod-infrastructure镜像拉取失败导致pod状态处于ContainerCreating
上传pod-infrastructure镜像
在node节点kubelet文件中KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
,此容器为pod的基础容器,创建pod时会去拉取此镜像,由于有墙有可能拉取失败,导致pod创建处于ContainerCreating
docker load -i pod-infrastructure.tar
更多推荐
所有评论(0)