在网上看了不少关于Kubernetes的视频,虽然现在还未用上,但是也是时候总结记录一下,父亲常教我的一句话:学到手的东西总有一天会有用!我也相信在将来的某一天会用到现在所学的技术。废话不多扯了。。。。

一、前期准备

1、k8s-master01:master主服务器(存在单点故障)

2、k8s-node01、k8s-node02:2个工作节点

3、Harbor:私有仓库(简单记录搭建Harbor私服仓库

4、Router:软路由(由于kubeadm是存放在谷歌云的,国内无法访问,K8S集群搭建之软路由的安装

二、系统初始化

以下操作均是对3个K8S节点进行操作

1、设置系统主机名

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

2、hosts文件相互解析

vi /etc/hosts,添加如下配置

192.168.66.10 k8s-master01
192.168.66.20 k8s-node01
192.168.66.21 k8s-node02

3、安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

4、设置防火墙为iptables并设置空规则

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

5、关闭selinux(防止pod运行在虚拟内存)

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

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.nv_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -f /etc/sysctl.d/kubernetes.conf

7、调整系统时区

#设置xiton.g时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
#将当前的UTC时间写入硬件时钟
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

8、关闭系统不需要服务

systemctl stop postfix && systemctl disable postfix

9、设置rsyslogd和systemd journald

mkdir /var/log/journal   #持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d mkdir > /etc/systemd/journald.conf.d <<EOF
[Journal]
#持久化保存到磁盘
Storage=persistent
#压缩历史日志
Compress=yes SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
#最大占用空间10G
SystemMaxUse=10G
#单日志文件最大200M
SystemMaxFileSize=200M
#日志保存时间2周
MaxRetentionSec=2week
#不将日志转发达 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

10、升级系统内核为4.4

CentOS7.x自带的3.10.x内核存在一些Bugs,导致运行的Docker、ku'bernetes不稳定。

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#安装完成后检查 /boot/grub2/grub.cfg中对应内核menuentry中是否包含initrd16配置,如果没有,再安装一次 yum --enablerepo=elrepo-kernel install -y kernel-lt #设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)' #重启机器
reboot

三、Docker相关设置(3个节点)

1、配置daemon

vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":
{
"max-size":"100m"
}
}

2、新建目录

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

3、重启Docker

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

四、安装Kubeadm(主从配置)

1、配置镜像源、启动kubelet

  地址:https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.53322f70MCb4ok

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1

systemctl enable kubelet.service

可能会先出现无socat依赖:可参考我这篇文章:Linux下RabbitMQ的安装及使用里面有安装socat依赖的过程

2、导入镜像

2.1、kubeadm初始化k8s集群时会从谷歌云中拉取镜像,国内是无法访问的。

  所以这里需要导入镜像,这里从别人通过kexue上网拉取的镜像:https://pan.baidu.com/share/init?surl=yrbtLGXqXaXmauScaif-3A,提取码:r6m5

2.2、解压压缩包

tar -xvf kubeadm-basic.images.tar.gz 

2.3、编写导入镜像脚本

#!/bin/bash

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

cd /root/kubeadm-basic.images

for i in $(cat /tmp/image-list.txt)
do
docker load -i $i
done rm -rf /tmp/image-list.txt

2.4、赋予执行权限

chmod a+x load-images.sh

2.5、执行导入镜像脚本:./load-images.sh

2.6、将镜像目录、导入镜像脚本远程拷贝至2个从节点、并执行对应导入镜像脚本

scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/
scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root/
./load-images.sh #root家目录执行该脚本

3、主节点初始化

3.1、获取初始化配置模板

kubeadm config print init-defaults > kubeadm-config.yaml  #将初始化文件打印至目标文件

3.2、编辑初始配置模板:vim  kubeadm-config.yaml

3.3、主节点初始化安装

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

依次执行3条命令

mkdir -p $HOME/.kube

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

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

4、网络部署

  由上一步可以看出,node状态处于notready,这是我们没有实现扁平化网络,现在部署一下

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml
kubectl get pod -n kube-system
kubectl get node  #再次查看状态

ifconfig也可查看到flannel

5、其他节点加入

命令已经在在主节点初始化时日志里如下:

kubeadm join 192.168.66.10:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:5be585a83158dedce452998083eda3ba40a578b9e7361b366670a4dd80e47edb

在master主节点查看:kubectl get node

五、配置私有仓库Harbor(3个节点)

参考这里搭建私有仓库Harbor:简单记录搭建Harbor私服仓库

1、配置docker的daemon.json文件

{
"exec-opts":["native.cgroupdriver=systemd"],
"insecure-registries": ["hub.rmitec.com"],
"log-driver":"json-file",
"log-opts":
{
"max-size":"100m"
}
}

2、配置本机hosts文件映射

192.168.66.10 k8s-master01  
192.168.66.20 k8s-node01
192.168.66.21 k8s-node02
192.168.66.15 hub.rmitec.com

3、重启docker

systemctl restart docker

4、k8s节点操作(node节点),登录harbor私服仓库,用户民:admin,密码:Harbor12345

5、查看私有仓库镜像(可以看出该镜像下载次数为0)

六、集群测试

1、master主节点运行pod

kubectl run nginx-deployment --image=hub.rmitec.com/library/mynginx:v1.0  --replicas=1    #运行nginx,指定副本数为1,从私有仓库Harbor
kubectl get deployment

kubectl get rs

kubectl get pod

kubectl get pod -o wide

 注:可以看出该nginx运行在node02节点,可以在node02节点查看

2、master节点访问测试:curl 10.244.2.2(/hostname)

3、查看私有仓库镜像状态

4、pod弹性伸缩

:可以看到node02运行2个nginx,node01运行1个nginx

5、SVC做负载均衡

kubectl get svc

kubectl expose deployment nginx-deployment --port=30000 --target-port=80

6、curl访问:curl 10.97.248.212:30000

7、ipvadm -Ln查看

8、对外暴露访问

8.1修改type类型为NodePort

kubectl edit svc nginx-deployment

8.2再次查看type类型

8.3外网测试

8.3.1浏览器访问:http://192.168.66.10:30525/,测试成功

8.3.2 浏览器访问:http://192.168.66.20:30525/(node01节点)

8.3.3浏览器访问:http://192.168.66.21:30525/(node02节点)

  

从centos7镜像到搭建kubernetes集群(kubeadm方式安装)的更多相关文章

  1. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  2. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  3. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  4. 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群

    目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...

  5. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  6. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  7. 通过Kubeadm搭建Kubernetes集群

    历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...

  8. 手把手从0到1:搭建Kubernetes集群

    搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...

  9. Ubuntu 16.04下搭建kubernetes集群环境

    简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...

随机推荐

  1. 介绍axios和promise

    今天小编为大家带来 axios 和promise的详细讲解,包含 axios的使用方法 多种写法,封装 以及 promise的详细讲解,项目中如何运用等,会一一的为大家讲解清楚. 一.axios的介绍 ...

  2. SequoiaDB 巨杉数据库Docker镜像使用教程

    为方便用户快速体验,SequoiaDB 巨杉数据库提供基于 Docker 的镜像.本文介绍如何在 Docker 环境下部署 SequoiaDB 分布式集群环境.   集群规划 我们准备在五个容器中部署 ...

  3. bat代码中判断 bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT

    · bat 代码中判断bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT 一.判断bat是否是以管理员权限运行 @echo off net.exe session >NUL & ...

  4. day27 综合架构 rsync备份服务

    sync软件使用方法: rsync命令 1v4 a 本地备份数据 cp [root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll ...

  5. PolandBall and Forest

    PolandBall lives in a forest with his family. There are some trees in the forest. Trees are undirect ...

  6. Paper: A Novel Time Series Forecasting Method Based on Fuzzy Visibility Graph

    Problem define a fuzzy visibility graph (undirected weighted graph), then give a new similarity meas ...

  7. 软件工程 实验一 Git版本管理

    实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指 ...

  8. 174. 地下城游戏(逆向DP)

    Q: 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士 ...

  9. 我竟然把today = new Date();写在了全局变量里面

    let today = new Date();应该在每次用之前重新生成新的对象,因为对于例如 today.getTime() 这种方法,取得是today对象的time,而非调用today对象取得实时时 ...

  10. Python 多任务(线程) day2 (2)

    同步 1.概念 :同步就是协同步调,按预定的先后次序运行 互斥锁 当多个线程几乎同时修改某一共享数据的时候,需要运行同步控制,最简单的同步机制是引入互斥锁.某个线程要更改共享数据时,先将其锁定,此时资 ...