从centos7镜像到搭建kubernetes集群(kubeadm方式安装)
在网上看了不少关于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方式安装)的更多相关文章
- kubeadm搭建kubernetes集群之三:加入node节点
在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- kubeadm 搭建kubernetes集群环境
需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...
- 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...
- kubeadm搭建kubernetes集群之一:构建标准化镜像
使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...
- 二进制搭建Kubernetes集群(最新v1.16.0版本)
目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...
- 通过Kubeadm搭建Kubernetes集群
历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...
- 手把手从0到1:搭建Kubernetes集群
搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...
- Ubuntu 16.04下搭建kubernetes集群环境
简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...
随机推荐
- Linux内核0.11代码阅读(转)
最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Li ...
- Java基本语法--控制台输入(Scanner类)
通过Scanner类获取用户输入时,控制台会一直等待用户的输入,可以输入不同类型的值.本篇博客主要讲解从控制台输入值,即Scanner类的使用方法. Api文档中关于Scanner类的构造方法 键盘输 ...
- http接口的调用
1.按照文档先写入参数,这里主要介绍 Json格式的String字符串,包括拼接数组 String sqr_arry [] = new String[rowList.size()]; for(int ...
- Android开发之JDK配置,及ADT下载
第一步: 到官网上下载jdk,记住关键的一点,首先要查看自己的windows电脑是32位的还是64位的,这里想下载相应的位数的jdk 第二步: 安装JDK,一般默认安装路径,不做自己修改安装路径,如: ...
- 【Python】获取星期字符串
原理:字符串切片 1.0代码: #获取星期字符串 weekStr="星期一星期二星期三星期四星期五星期六星期日" weekId=eval(input("请输入星期数字(1 ...
- Qt- 图形界面应用程序的运行模式
main() 定义主窗口 ————>fd = DefineMainWindow() 创建主窗口————>win = CreateMainWindow() 创建主窗口中的元素-----> ...
- Javaweb项目不需要端口号及项目名的访问配置(已备注)
1.不需要端口号的配置: 在server.xml中找到节点: <Connector URIEncoding="UTF-8" connectionTimeout="2 ...
- Linux内核源码阅读记录一之分析存储在不同段中的函数调用过程
在写驱动的过程中,对于入口函数与出口函数我们会用一句话来修饰他们:module_init与module_exit,那会什么经过修饰后,内核就能狗调用我们编写的入口函数与出口函数呢?下面就来分析内核调用 ...
- 关于pip命令的几点提醒
pip install xxxxx 总会遇到安装失败,或者下载速度很慢的情况.这是因为从国外安装资源包,造成速度慢,那有咩有国内的源呢,有的. 国内源: 清华:https://pypi.tuna.ts ...
- JavaScript 开胃菜
注释 单行注释:// 快捷键: CTRL + / 多行注释: /* 内容 */ 快捷键: ctrl + shift + / 变量 申明变量 var name; 赋值 name = 'peach'; 初 ...