k8s环境部署

2020-06-12  本文已影响0人  妞儿是只猫

上一节开篇,废话了很多,这篇咱们直接进入主题,搞一个k8s学习环境。

由于官方上推荐初学者学习minikube这个环境,由于这东西基本是一键部署,本人还是想了解一下各个组件之间的安装以及各配置文件如何修改,所以决定搭建传统的k8s集群环境。

本人的计算机资源有限,目前只搭建了1 k8s-master节点、1 etcd节点,以及2个node节点,搭建步骤如下:

# 一、环境准备

## 1、机器环境

节点CPU核数必须是 :>= 2核 ,否则k8s无法启动

DNS网络: 最好设置为 本地网络连通的DNS,否则网络不通,无法下载一些镜像

linux内核: linux内核必须是 4 版本以上,因此必须把linux核心进行升级

准备3台虚拟机环境,或者是3台阿里云服务器都可。

k8s-master01:  此机器用来安装k8s-master的操作环境

k8s-master01: 此机器用来安装etcd环境(资源有限,和master供用一个宿主机)

k8s-node01: 此机器用来安装k8s node节点的环境

k8s-node02: 此机器用来安装k8s node节点的环境

## 2、依赖环境

#1、给每一台机器设置主机名

hostnamectl set-hostname k8s-master01

hostnamectl set-hostname k8s-node01

hostnamectl set-hostname k8s-node02

#查看主机名

hostname

#配置IP host映射关系

vi /etc/hosts

192.168.202.132 k8s-master01

192.168.202.133 k8s-node01

192.168.202.134 k8s-node02

202.106.0.20

#2、安装依赖环境,注意:每一台机器都需要安装此依赖环境

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc

#3、安装iptables,启动iptables,设置开机自启,清空iptables规则,保存当前规则到默认规则

# 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

# 置空iptables

yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

#4、关闭selinux

#闭swap分区【虚拟内存】并且永久关闭虚拟内存

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

#关闭selinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

#5、升级Linux内核为4.44版本

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

#安装内核

yum --enablerepo=elrepo-kernel install -y kernel-lt

#设置开机从新内核启动

grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'

#注意:设置完内核后,需要重启服务器才会生效。

#查询内核

uname -r

#########################################################################

#6、调整内核参数,对于k8s

cat > kubernetes.conf <<EOF

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

net.ipv4.ip_forward=1

net.ipv4.tcp_tw_recycle=0

vm.swappiness=0

vm.overcommit_memory=1

vm.panic_on_oom=0

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

EOF

#将优化内核文件拷贝到/etc/sysctl.d/文件夹下,这样优化文件开机的时候能够被调用

cp kubernetes.conf /etc/sysctl.d/kubernetes.conf

#手动刷新,让优化文件立即生效

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

#7、调整系统临时区 --- 如果已经设置时区,可略过

#设置系统时区为中国/上海

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、设置日志保存方式

#1).创建保存日志的目录

mkdir /var/log/journal

#2).创建配置文件存放目录

mkdir /etc/systemd/journald.conf.d

#3).创建配置文件

cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF

[Journal]

Storage=persistent

Compress=yes

SyncIntervalSec=5m

RateLimitInterval=30s

RateLimitBurst=1000

SystemMaxUse=10G

SystemMaxFileSize=200M

MaxRetentionSec=2week

ForwardToSyslog=no

EOF

#4).重启systemd journald的配置

systemctl restart systemd-journald

#9、打开文件数调整 (可忽略,不执行)

echo "* soft nofile 65536" >> /etc/security/limits.conf

echo "* hard nofile 65536" >> /etc/security/limits.conf

#10、kube-proxy 开启 ipvs 前置条件

modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

##使用lsmod命令查看这些文件是否被引导

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

```

## 3、搭建etcd部署

#登录k8s-master01服务器

ssh root@k8s-master01

#下载etcd

yum -y install etcd

#配置config

vi /etc/etcd/etcd.conf

#设置如下

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://k8s-master01:2379"

#运行etcd

#设置开机启动 且启动服务

systemctl enable etcd && systemctl start etcd

[root@localhost ~]# netstat -nlp | grep etcd

tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 7130/etcd

tcp6 0 0 :::2379

#配置etcd内网信息

#设置 (就像定义一个变量一样)

etcdctl -C http://192.168.202.132:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

#获取

etcdctl -C http://192.168.202.132:2379 get /atomic.io/network/config

{"Network":"172.17.0.0/16"}

#注:

172.17.0.0/16这个是节点主机Docker网卡的网段。

/atomic.io/network/config类似定义的变量名,在节点机中Flanneld配置里的FLANNEL_ETCD_PREFIX项对应。

## 4、master服务器上安装服务

#登录master服务器

ssh root@k8s-master01

#安装服务

yum -y install kubernetes-master

#配置config

vi /etc/kubernetes/apiserver

# 配置如下

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_ETCD_SERVERS="--etcd-servers=http://k8s-master01:2379"

#配置config

vi  /etc/kubernetes/config

#配置如下

KUBE_MASTER="--master=http://k8s-master01:8080"

#启动apiserver scheduler kuber-controller-manager 服务

systemctl enable kube-apiserver kube-scheduler kube-controller-manager

systemctl start kube-apiserver kube-scheduler kube-controller-manager

[root@localhost ~]# netstat -nlpt | grep kube

tcp6 0 0 :::6443 :::* LISTEN 15190/kube-apiserve

tcp6 0 0 :::10251 :::* LISTEN 15191/kube-schedule

tcp6 0 0 :::10252 :::* LISTEN 15192/kube-controll

tcp6 0 0 :::8080 :::* LISTEN 15190/kube-apiserve

#测试

curl http://192.168.202.132:8080/version

{

  "major": "1",

  "minor": "5",

  "gitVersion": "v1.5.2",

  "gitCommit": "269f928217957e7126dc87e6adfa82242bfe5b1e",

  "gitTreeState": "clean",

  "buildDate": "2017-07-03T15:31:10Z",

  "goVersion": "go1.7.4",

  "compiler": "gc",

  "platform": "linux/amd64"

}

#注:若创建pod认证失败

#修改配置

vi /etc/kubernetes/apiserver

#修改如下文

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

在该行删除ServiceAccount SecurityContextDeny 这2个选项

#重启服务

systemctl restart kube-apiserver

删除pod,重新创建

## 5、部署node服务器

由于部署2个node节点,相同操作步骤,只是配置文件,稍作修改。以一个node节点为例。

#登录k8s-node01节点

ssh root@192.168.202.133

#5.1安装docker

yum -y install docker

#开机自启 并启动

systemctl enable docker  && systemctl start docker

#修改config

vi  /etc/docker/daemon.json

#设置如下

{"registry-mirrors": ["https://registry.docker-cn.com"]}

#重启

systemctl restart docker

#查看仓库源是否设置成功

docker info

#5.2部署flannel

#安装

yum -y install flannel

#修改配置

vi /etc/sysconfig/flanneld

#修改如下

FLANNEL_ETCD_ENDPOINTS="http://k8s-master01:2379"

FLANNEL_ETCD_PREFIX="/atomic.io/network"

#开机自启并启动服务

systemctl enable flanneld && systemctl restart flanneld

netstat -nlp | grep flanneld

udp        0      0 172.16.253.131:8285    0.0.0.0:* 

#5.3安装k8s-node

#安装服务

yum -y install kubernetes-node

#修改配置

vi /etc/kubernetes/config

#修改如下文

KUBE_MASTER="--master=http://k8s-master01:8080"

#修改配置

vi /etc/kubernetes/kubelet

#修改如下

KUBELET_HOSTNAME="--hostname-override=k8s-node01"

KUBELET_API_SERVER="--api-servers=http://k8s-master01:8080"

#启动服务

systemctl enable kubelet kube-proxy  && systemctl start kubelet kube-proxy

netstat -ntlp | grep kube

tcp        0      0 127.0.0.1:10248        0.0.0.0:*              LISTEN      7838/kubelet       

tcp        0      0 127.0.0.1:10249        0.0.0.0:*              LISTEN      7842/kube-proxy   

tcp        0      0 127.0.0.1:10250        0.0.0.0:*              LISTEN      7838/kubelet     

tcp        0      0 127.0.0.1:10255        0.0.0.0:*              LISTEN      7838/kubelet       

tcp6      0      0 :::4194                :::*                    LISTEN      7838/kubelet 

#5.4可能存在的问题

创建pod 节点若出现/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

#解决方案

yum install *rhsm* -y

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

##6、验证

#登录到master服务器上

#查看节点信息

kubectl get nodes

NAME        STATUS    AGE

k8s-node01  Ready    33m

k8s-node02  Ready    33m

上一篇下一篇

猜你喜欢

热点阅读