【系统运维】Centos7 搭建kubernetes(K8S)操作手册

准备工作:

一、开通云服务器

建站首先要有服务器和域名,对于个人使用的小型网站,一台1核CPU|2G内存|1M带宽|40G系统盘的云服务器ECS实例即可满足需要。目前国内主流云服务提供商为阿里云腾讯云。

这里展示以阿里云为例,腾讯云也是大同小异的,如何开通云服务器这里略过,见“如何快速搭建自己独立的个人博客?”文章有详情介绍;

Kubernetes 简介:

Kubernetes Google 开源的基于 Docker 的容器集群管理系统,通过 yaml 语言写的配置文件,简单快速的就能自动部署好应用环境,支持应用横向扩展,并且可以组织、编排、管理和迁移这些容器化的应用

一、环境要求

           需要rhel7/centos7及以上版本 ,内核3.10及以上。   

系统版本

主机名

IP地址

服务

RHEL7.2

master01

10.0.93.205

apiserver,etcd,controler,scheduler

RHEL7.2

minion01

10.0.93.1

aroxy,kubelet,flanneld

RHEL7.2

minion02

10.0.93.141

aroxy,kubelet,flanneld

CentOS6.6

宿主机

10.0.93.168

Yum源,KVM宿主机

系统环境配置:基础系统环境配置需要在所有节点kubernetes进行配置。

1.1)、NTP配置

如内网无法访问公网,则需要单独配置一台NTP服务器用作时间同步;如可以访问直接使用公网的NTP服务器。

a)、该设备能通公网:

NTP服务器中默认配置有公网NTP地址。

#yum install -y ntp 

#systemctl start ntpd

#systemctl enable ntpd

b)、该设备不能通公网:

添加内网NTP服务器地址至NTP配置文件中

#yum install -y ntp

#echo “server 10.0.93.168” >>/etc/ntp.conf   # 10.0.93.168为内网NTP服务器

#systemctl start ntpd

#systemctl enable ntpd

1.2)、DNS配置

修改/etc/hosts添加IP到主机名的解析:

# cat /etc/hosts

10.0.93.205 master01

10.0.93.1  minion01

10.0.93.141 minion02

1.3)、防火墙配置

关闭防火墙:

注意:关闭防火墙暂时对Kubernetes网络架构影响,后续有待观察。

#systemctl stop firewalld.service

#systemctl disable firewalld.service

#systemctl stop iptables.service

#systemctl disable iptables.service

1.4)、YUM源设置

本文提供基于rpm的yum安装方式,需要事先缓存好kubernetes环境需要的所有安装包,并且在内网环境中制作成yum源(本例中yum源是168)。方法如下:

将缓存的包上传至/var/ftp/pub/k8s/

 从上传的软件包中安装vsftpd

#rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm

#systemctl start vsftpd

默认情况下是允许匿名登录的,目录是:/var/ftp/

从上传的软件包中安装yum源制作命令

#rpm -ivh createrepo-0.9.9-23.el7.noarch.rpm

把需要安装的rpm包放在/var/ftp/pub/目录下,执行yum源制作命令

createrepo /var/ftp/pub/k8s/

新增 /etc/yum.repos.d/k8s.repo 增加以下内容

[k8s]

name=k8s

baseurl=ftp://10.0.93.168/pub

enabled=1

gpgcheck=0

增加yum源后,执行下面两句,重新缓存rpm元数据

#yum clean all

#yum makecache

二、K8S master 安装配置

2.1)、安装k8s软件包 ,K8S可以通过多种方式安装,此文档提供yum方法安装。

sudo yum -y install --enablerepo=k8s docker-selinux

sudo yum -y install --enablerepo=k8s docker

sudo yum -y install --enablerepo=k8s socat

sudo yum -y install --enablerepo=k8s flannel

sudo yum -y install --enablerepo=k8s ntp

sudo yum -y install --enablerepo=k8s ntpdate

sudo yum -y install --enablerepo=k8s kubernetes-node

sudo yum -y install --enablerepo=k8s kubernetes-client

sudo yum -y install --enablerepo=k8s kubernetes-master

sudo yum -y install --enablerepo=k8s kubernetes

sudo yum -y install --enablerepo=k8s etcd

2.2)、软件配置

a)、配置docker

修改docker配置文件,允许远程访问:

sudo sed -i "/OPTIONS/c OPTIONS='--insecure-registry 10.0.93.205:5000 --selinux-enabled -H tcp://0.0.0.0:28015 -H unix://var/run/docker.sock'" /etc/sysconfig/docker

注意:--insecure-registry 后面跟的是私用仓库地址,根据实际部署情况修改。

启动docker

sudo systemctl restart docker

sudo systemctl enable docker

b)、配置k8s

修改k8s  apiserver文件

sudo sed -i "/KUBE_API_ADDRESS/c KUBE_API_ADDRESS=\"--address=0.0.0.0\"" /etc/kubernetes/apiserver

sudo sed -i "/# KUBE_API_PORT/c KUBE_API_PORT=\"--port=8080\"" /etc/kubernetes/apiserver

sudo sed -i "/# KUBELET_PORT/c KUBELET_PORT=\"--kubelet_port=10250\"" /etc/kubernetes/apiserver

sudo sed -i "/KUBE_ETCD_SERVERS/c KUBE_ETCD_SERVERS=\"--etcd_servers=http://master01:2379\"" /etc/kubernetes/apiserver

sudo sed -i "/KUBE_ADMISSION_CONTROL/c KUBE_ADMISSION_CONTROL=\"--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota\"" /etc/kubernetes/apiserver

修改k8s  etcd文件

sudo sed -i "/ETCD_LISTEN_CLIENT_URLS/c ETCD_LISTEN_CLIENT_URLS=\"http://0.0.0.0:2379\"" /etc/etcd/etcd.conf

sudo sed -i "/ETCD_ADVERTISE_CLIENT_URLS/c ETCD_ADVERTISE_CLIENT_URLS=\"http://localhost:2379\"" /etc/etcd/etcd.conf

修改k8s flanneld文件

sudo sed -i "/FLANNEL_ETCD=/c FLANNEL_ETCD=\"http://127.0.0.1:2379\"" /etc/sysconfig/flanneld

sudo sed -i "/FLANNEL_ETCD_KEY=/c FLANNEL_ETCD_KEY=\"/coreos.com/network\"" /etc/sysconfig/flanneld

2.3)、启动K8S服务:

启动master上运行的服务

for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler ; do

  systemctl restart $SERVICES

systemctl enable $SERVICES systemctl status $SERVICES

Done   

 设置flanneld的IP段,重新启动flanneld

sudo etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'

sudo systemctl restart flanneld

sudo systemctl enable flanneld

sudo systemctl status flanneld

三、K8S minion 安装配置

3.1)、yum安装minion

sudo yum -y install --enablerepo=k8s docker-selinux

sudo yum -y install --enablerepo=k8s docker

sudo yum -y install --enablerepo=k8s socat

sudo yum -y install --enablerepo=k8s flannel

sudo yum -y install --enablerepo=k8s ntp

sudo yum -y install --enablerepo=k8s ntpdate

sudo yum -y install --enablerepo=k8s kubernetes-node

sudo yum -y install --enablerepo=k8s kubernetes-client

sudo yum -y install --enablerepo=k8s kubernetes-master

sudo yum -y install --enablerepo=k8s kubernetes

sudo yum -y install --enablerepo=k8s etcd

3.2)、软件配置

a)、配置docker

修改docker配置文件,允许远程访问

sudo sed -i "/OPTIONS/c OPTIONS='--insecure-registry 10.0.93.205:5000 --selinux-enabled -H tcp://0.0.0.0:28015 -H unix://var/run/docker.sock'" /etc/sysconfig/docker

注意:--insecure-registry 后面跟的是私用仓库地址,根据实际部署情况修改。

启动docker

sudo systemctl restart docker

sudo systemctl enable docker

b)、配置config

sudo echo "KUBE_ETCD_SERVERS=\"--etcd_servers=http://DSJ-signal-900G-98:2379\"" >> /etc/kubernetes/config

sudo sed -i "/KUBE_ALLOW_PRIV/c KUBE_ALLOW_PRIV=\"--allow_privileged=false\"" /etc/kubernetes/config

sudo sed -i "/KUBE_MASTER/c KUBE_MASTER=\"--master=http://DSJ-signal-900G-100:8080\"" /etc/kubernetes/config

c)、配置kbelet

sudo sed -i "/KUBELET_ADDRESS/c KUBELET_ADDRESS=\"--address=0.0.0.0\"" /etc/kubernetes/kubelet

sudo sed -i "/# KUBELET_PORT/c KUBELET_PORT=\"--port=10250\"" /etc/kubernetes/kubelet

sudo sed -i "/KUBELET_HOSTNAME/c KUBELET_HOSTNAME=\"--hostname_override=DSJ-signal-900G-98\"" /etc/kubernetes/kubelet

sudo sed -i "/KUBELET_API_SERVER/c KUBELET_API_SERVER=\"--api_servers=http://DSJ-signal-900G-100:8080\"" /etc/kubernetes/kubelet

sudo sed -i "/KUBELET_ARGS/c KUBELET_ARGS=\"--pod-infra-container-image=DSJ-signal-900G-100:5000/pause:0.8.0\"" /etc/kubernetes/kubelet

d)、配置flaneld

sudo sed -i "/FLANNEL_ETCD=/c FLANNEL_ETCD=\"http://DSJ-signal-900G-100:2379\"" /etc/sysconfig/flanneld

sudo sed -i "/FLANNEL_ETCD_KEY=/c FLANNEL_ETCD_KEY=\"/coreos.com/network\"" /etc/sysconfig/flanneld

e)、启动K8S服务

for SERVICES in kube-proxy kubelet docker flanneld; do

    systemctl restart $SERVICES

    systemctl enable $SERVICES

    systemctl status  $SERVICES

f)、设置docker的IP,重启docker

注意:这一步必须在所有minion进行设置,flannel类似交换机功能,互联各个docker0上的网桥,每个网桥IP地址段是不一样的。这样才能保证每个pod IP地址的唯一性

sudo flanneldIp=$(ip a | grep flannel | grep inet | awk '{print $2}' | awk -F '/' '{print $1}')

sudo ifconfig docker0 ${flanneldIp/.0/.1} netmask 255.255.255.0

sudo systemctl restart docker

sudo systemctl enable docker

3.3)、k8s集群部署DNS服务

a)、修改每个minion的/etc/kubernetes/kubelet配置文件

KUBELET_ARGS="--cluster-dns=10.254.100.100 --cluster-domain=cluster.local --pod-infra-container-image=172.16.71.169:5000/pause:0.8.0"

注:cluster-dns的值与skydns-svc.yaml文件中的值必须一致,并且DNS的网段必须跟定义service网段一致,本例中,APIserver 定义service 10.254网段

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

重启kubelet服务

systemctl restart kubelet

上传yaml文件到master节点的/etc/kubernetes/yaml

[root@master01 yaml]# pwd

/etc/kubernetes/yaml

[root@master01 yaml]# ll

total 0

drwxrwxr-x 4 root root 44 Feb 24 11:18 influxdb

drwxrwxr-x 2 root root 74 Feb 24 14:42 kube-ui

drwxrwxr-x 2 root root 68 Feb 25 10:59 skydns

启动dns服务 进入到dns的配置文件目录下,执行:

        kubectl create-f   /etc/kubernetes/yaml/kube-ui/kube-system.yaml

     kubectl create -f   /etc/kubernetes/yaml/skydns/skydns-rc.yaml

       kubectl create -f   /etc/kubernetes/yaml/skydns/skydns-svc.yaml

     kubectl create -f   /etc/kubernetes/yaml/skydns/busybox.yaml

注意:先执行RC文件,再执行SVC文件,这个是kubernetes架构要求的,先后顺序不能乱。

b)、验证DNS功能

#kubectl exec busybox -- nslookup       kubernetes.default.svc.cluster.local

Server:    10.254.100.100

Address 1: 10.254.100.100

Name:      kubernetes.default.svc.cluster.local

Address 1: 10.254.0.1

四、常见问题:

问题一:

localhost kube-apiserver: E1126 21:52:06.697708    1963 server.go:454] Unable to generate self signed cert: open /var/run/kubernetes/apiserver.crt: permission denied

处理:

# vi /usr/lib/systemd/system/kube-apiserver.service

[Service]

#service下面添加以下内容。

PermissionsStartOnly=true

ExecStartPre=-/usr/bin/mkdir /var/run/kubernetes

ExecStartPre=/usr/bin/chown -R kube:kube /var/run/kubernetes/

# systemctl daemon-reload    

# systemctl restart kube-apiserver

问题二:

Nov 26 21:52:06 localhost kube-apiserver: E1126 21:52:06.697818    1963 server.go:464] Unable to listen for secure (open /var/run/kubernetes/apiserver.crt: no such file or directory); will try again.

处理:# vim /etc/kubernetes/apiserver

KUBE_API_ARGS="--secure-port=0"

在KUBE_API_ARGS加上--secure-port=0参数。

原因如下:

--secure-port=6443: The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all.

52it.club CSDN认证博客专家 数据分析 项目经理 产品经理
1、【极客精神】具有较强行业敏锐度,喜欢追逐前沿技术(docker、k8s、elasticsearch、Nginx、mongodb、spring boot/spring cloud等开源软件)、并关注前沿技术在业务中的价值;时刻清理自我,过去的经历不再重要,面对未来,我始终保持一颗学习的心态;
2、【团队管理】擅长团队组建与扩充、产品(尤其是软件产品)研发管理体系的建立与完善;极强的适应能力、组织能力、接受能力和应变能力,友善处理人际关系;曾带领研发团队(UI、前端、后端、测试、产品)高效完成电商、新媒体、物联网产品等产品
3、【项目丰富】开发过多种类型的产品,其中包括电商、股票理财、资讯等
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页