vlambda博客
学习文章列表

k8s实战之集群构建

准备环境(三台服务器)
1、给每一台机器设置主机名
‍‍‍

执行命令:

hostnamectl set-hostname k8s-master01

hostnamectl set-hostname k8s-node01

hostnamectl set-hostname k8s-node02

#配置IP host映射关系

命令:vi /etc/hosts

10.200.175.11 k8s-master01

10.200.175.12 k8s-node01

10.200.175.13 k8s-node02

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

执行命令:

yum install -y conntrack ntpdate ntp ipvsadmipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzszbash-completion tree bridge-utils unzip bind-utils gcc
3、安装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.4版本

执行命令:

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.231-1.el7.elrepo.x86_64) 7 (Core)'

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

reboot

#查询内核

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、关闭不需要的服务

systemctl stop postfix && systemctldisable 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、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 -eip_vs -e nf_conntrack_ipv4


docker部署
1、安装docker

yum install -y yum-utilsdevice-mapper-persistent-data lvm2

#紧接着配置一个稳定(stable)的仓库

yum-config-manager --add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新Yum安装的相关Docke软件包&安装DockerCE

yum update -y && yum install docker-ce

2、设置docker daemon文件

#创建/etc/docker目录

mkdir /etc/docker

#更新daemon.json文件

cat > /etc/docker/daemon.json<<EOF

{"exec-opts":["native.cgroupdriver=systemd"],"log-driver":"json-file","log-opts":{"max-size":"100m"},"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]}

EOF

#创建,存储docker配置文件

mkdir -p /etc/systemd/system/docker.service.d

3、重启docker服务

systemctl daemon-reload && systemctlrestart docker && systemctl enable docker

安装kubeadm
1、安装kubernetes的时候,需要安装kubelet, kubeadm等包

cat <<EOF >/etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

   http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF


2、安装kubeadm、kubelet、kubectl


yum install -y kubeadm-1.15.1kubelet-1.15.1 kubectl-1.15.1

或者

yum install -y kubeadm-1.18.2kubelet-1.18.2 kubectl-1.18.2

# 启动 kubelet

systemctl enable kubelet && systemctlstart kubelet

查看k8s配置:这里可以修改对外接口范围,编辑 vi /etc/kubernetes/manifests/kube-apiserver.yaml 配置文件,增加配置 --service-node-port-range=2-65535



集群安装
#1).上传镜像压缩包,把压缩包中的镜像导入到本地镜像仓库

解压:tar -zxvf kubeadm-basic.images.tar.gz

#2).编写脚本,导入镜像包到本地docker镜像仓库

导入镜像脚本代码 (在任意目录下创建sh脚本文件:images-load.sh)

#!/bin/bash

#注意镜像解压的目录位置

ls/root/kubeadm-basic.images > /tmp/images-list.txt

cd/root/kubeadm-basic.images

for i in$(cat /tmp/images-list.txt)

do

   dockerload -i $i

done

rm -rf/tmp/images-list.tx

#3).修改权限,可执行权限

chmod 755 images-load.sh

#4).开始执行,镜像导入

./image-loads.sh

#5).传输文件及镜像到其他node节点

#拷贝到node01节点

scp -r images-load.sh kubeadm-basic.imagesroot@k8s-node01:/root/

#拷贝到node02节点

scp -r images-load.sh kubeadm-basic.imagesroot@k8s-node02:/root/

#其他节点依次执行sh脚本,导入镜像

k8s部署

#初始化主节点 --- 只需要在主节点执行

#1).拉去yaml资源配置文件

kubeadm config print init-defaults >kubeadm-config.yaml

#2).修改yaml资源文件

localAPIEndpoint:

kubernetesVersion:v1.15.1 #注意:修改版本号,必须和kubectl版本保持一致

networking:

podSubnet: "10.244.0.0/16"

serviceSubnet:"10.96.0.0/12"

#指定使用ipvs网络进行通信

---

apiVersion:kubeproxy.config.k8s.io/v1alpha1

kind:kubeProxyConfiguration

featureGates:

SupportIPVSProxyMode:true

mode:ipvs

#3).初始化主节点,开始部署

kubeadm init --config=kubeadm-config.yaml--experimental-upload-certs | tee kubeadm-init.log

#4).初始化成功后执行如下命令

#创建目录,保存连接配置缓存,认证文件

mkdir -p $HOME/.kube

#拷贝集群管理配置文件

cp -i /etc/kubernetes/admin.conf$HOME/.kube/config

#授权给配置文件

chown $(id -u):$(id -g) $HOME/.kube/config 

#5).flannel插件

#部署flannel网络插件 --- 只需要在主节点执行

下载flannel网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

部署flannel

kubectl create -f kube-flannel.yml

#也可进行部署网络

kubectl apply -f

https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#6).节点Join

构建kubernetes主节点成功,会产生一个日志文件(命令中指定日志输出文件 “tee kubeadm-init.log”),内容如下所示:


k8s实战之集群构建                   

红色 部分给出的命令即是把其他节点加入进来的命令。

# 加入主节点以及其余工作节点,执行安装日志中的命令即可

#查看日志文件

cat kubeadm-init.log

# 负责命令到其他几个node节点进行执行即可

kubeadm join 192.168.66.10:6443 --tokenabcdef.0123456789abcdef \

  --discovery-token-ca-cert-hash

sha256:6d8aad1451c1303ee52aada4ea2351e8c8d64863b074628586535d0d369ca2c2

执行完毕,查看效果如下所示:



# 查询工作空间中pod容器的详细信息

kubectl get pod -n kube-system -o wide

其他

#1).删除pod可以通过删除yml文件,彻底删除:kubectl delete –f xxx.yml

#2).删除pod: kubectl delete pod pod名称,这样不能删除,因为有自愈能力。

#3).删除部署的my-nginx服务。彻底删除:kubectl delete deployment my-nginx

#4).除service服务:kubectl delete service my-nginx