k8s环境部署

上一节开篇,废话了很多,这篇咱们直接进入主题,搞一个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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335