PS:所有机器主机名请提前改好好

在上一篇,ETCD集群和nginx我们已经搭建成功了,下面我们需要搭建master相关组件,apiverser需要与etcd通信并操作

1.配置证书

将etcd证书上传到master节点,在etcd01上操作

USER=root
export K8SHOST1=172.16.100.31
for HOST in ${K8SHOST1}
do
ssh ${USER}@${HOST} 'mkdir -p /etc/kubernetes/pki/etcd'
scp -r /etc/kubernetes/pki/etcd/ca.crt ${USER}@${HOST}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/apiserver-etcd-client.crt ${USER}@${HOST}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/apiserver-etcd-client.key ${USER}@${HOST}:/etc/kubernetes/pki/
done

在k8s1上操作,在操作之前,我们已预先安装过单点k8s集群拿到了我们想要一的初始化环境,所以,下面有2种部署方式

第一种,环境没有得到初始化

初始化之前,登录etcd01上传etcd证书到master01上
scp -r /etc/kubernetes/pki root@172.16.100.31:/etc/kubernetes/
wget https://gitee.com/hewei8520/File/raw/master/1.13.5/start.sh

vim start.sh

#!/usr/bin/env bash
export HOST1=172.16.100.31
export HOST2=172.16.100.32
export HOST3=172.16.100.33
export HOST4=172.16.100.34
export HOST5=172.16.100.35
# master地址池,因为需要在master01上操作,所以IPS里不需要01的地址
IPS='172.16.100.32 172.16.100.33 172.16.100.34 172.16.100.35'
# 远程访问登录帐号
export USER=root
# 初始化LVM挂载卷
curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/lvm.sh | bash
# 初始化系统
curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/systemd.sh |bash
mkdir -p /data/kubelet
ln -s /data/kubelet /var/lib/kubelet
systemctl stop docker
mv /var/lib/docker /data/
ln -s /data/docker /var/lib/docker
systemctl restart docker
# 生成kubeadm 配置
# 脚本包含IP地址,如果IP不一致请手动下载好修改掉,和之前的系统环境所属IP和hostname保持一致
wget https://gitee.com/hewei8520/File/raw/master/1.13.5/base-env-config-multi-node.sh
bash base-env-config-multi-node.sh
# 生成证书 为了不让证书提前过期,已重新编译了kubeadm 证书有效期10年
wget https://github.com/qq676596084/QuickDeploy/raw/master/1.13.5/bin/kubeadm && chmod +x kubeadm
./kubeadm init phase certs ca
./kubeadm init phase certs apiserver --config=kubeadm-config-init.yaml
./kubeadm init phase certs apiserver-kubelet-client --config=kubeadm-config-init.yaml
./kubeadm init phase certs front-proxy-ca --config=kubeadm-config-init.yaml
./kubeadm init phase certs front-proxy-client --config=kubeadm-config-init.yaml # 初始化mstart01
kubeadm init --config kubeadm-config-init.yaml
count=$(netstat -anpt |grep |grep LISTEN |wc -l)
if [ $count -gt ];then
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://gitee.com/hewei8520/File/raw/master/1.13.4/rbac-kdd.yaml
kubectl apply -f https://gitee.com/hewei8520/File/raw/master/1.13.4/calico.yaml
# status
master_status=$(kubectl get nodes | grep "NotReady" | awk {'print $2'})
while [[ `kubectl get nodes | grep "NotReady" | awk {'print $2'} |sed -n '1p'` == "NotReady" ]]
do
echo "master 节点正在初始化,请稍候"
sleep
done
else
echo "master 初始化失败, 请查看日志"
exit
fi echo "k8s-01 初始化成功"
sed -i 's/var\/lib/data/g' /lib/systemd/system/kubelet.service.d/-kubeadm.conf
sed -i 's/Environment="KUBELET_KUBECONFIG_ARGS=/Environment="KUBELET_KUBECONFIG_ARGS=--root-dir=\/data\/kubelet /g' /lib/systemd/system/kubelet.service.d/-kubeadm.conf
systemctl enable --now docker
systemctl enable --now kubelet
kubectl get nodes -o wide
# 更新IPS maser节点
kubeadm_join=`kubeadm token create --print-join-command`
for HOST in ${IPS}
do
ssh ${USER}@${HOST} curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/lvm.sh |bash
ssh ${USER}@${HOST} mkdir -p /etc/kubernetes/
scp -r /etc/kubernetes/pki ${USER}@${HOST}:/etc/kubernetes/
ssh ${USER}@${HOST} curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/base-env-config-multi-node.sh |bash
ssh ${USER}@${HOST} curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/systemd.sh |bash
ssh ${USER}@${HOST} ${kubeadm_join} --experimental-control-plane
ssh ${USER}@${HOST} sed -i 's/var\/lib/data/g' /usr/lib/systemd/system/kubelet.service.d/-kubeadm.conf
ssh ${USER}@${HOST} sed -i 's/Environment="KUBELET_KUBECONFIG_ARGS=/Environment="KUBELET_KUBECONFIG_ARGS=--root-dir=\/data\/kubelet /g' /usr/lib/systemd/system/kubelet.service.d/-kubeadm.conf
ssh ${USER}@${HOST} systemctl enable --now kubelet
done

start.sh

若地址填写无误执行start.shmaster集群即可安装成功

base-env-config-multi-node.sh 用于生成一些系统环境参数 主机映射以及kubeadm所需要的config配置文件

#!/usr/bin/env bash
export MASTER_IPS='H1=k8s-master-01=172.16.100.31 H2=k8s-master-02=172.16.100.32 H3=k8s-master-03=172.16.100.33 H4=k8s-master-04=172.16.100.34 H5=k8s-master-05=172.16.100.35 V1=apiserver01.1ziton.com=172.16.100.254'
export ETCDHOST0=172.16.100.51
export ETCDHOST1=172.16.100.52
export ETCDHOST2=172.16.100.53
# 网卡名称
export ETH_INT=eth0
# k8s化版本号
export K8SVERSION=v1.13.5
export VIP_PORT=
i=
for IP in $MASTER_IPS
do
i=$(($i+))
export $IP
HOST=`echo $IP |awk -F "=" '{print $1}'`
IPS=`eval echo '$'$HOST`
hostname=`echo $IPS |awk -F "=" '{print $1}'`
hostip=`echo $IPS |awk -F "=" '{print $2}'`
if [[ "$i" -ge "" ]];then
export VIP=$hostip
export HOSTVIPNAME=$hostname
sed -i '$a\'$VIP' '$HOSTVIPNAME'' /etc/hosts
else
export HOST$i=$hostip
fi
sed -i '$a\'$hostip' '$hostname'' /etc/hosts
done
hostname=`hostname`
hostip=`ip a |grep ${ETH_INT} |awk '{print $2}' |sed -n '2p' |awk -F "/" '{print $1}'`
sed -i '$a\'$hostip' '$hostname'' /etc/hosts
host=`hostname`
if [[ "$host" != "k8s-master-01" ]];then
exit
else
echo `hostname`
fi
cat <<EOF > /root/kubeadm-config-init.yaml
apiVersion: kubeadm.k8s.io/v1beta1
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 0s
usages:
- signing
- authentication
kind: InitConfiguration
---
apiServer:
certSANs:
- "k8s-master-01"
- "k8s-master-02"
- "k8s-master-03"
- "k8s-master-04"
- "k8s-master-05"
- "k8s-master-06"
- "k8s-master-07"
- "k8s-master-08"
- "k8s-master-09"
- "${HOSTVIPNAME}"
- "127.0.0.1"
- "$HOST1"
- "$HOST2"
- "$HOST3"
- "$HOST4"
- "$HOST5"
- "$VIP"
extraArgs:
authorization-mode: Node,RBAC
advertise-address: 0.0.0.0
service-node-port-range: "10000-40000"
controlPlaneEndpoint: "${HOSTVIPNAME}:${VIP_PORT}"
controllerManager:
extraArgs:
address: 0.0.0.0
scheduler:
extraArgs:
address: 0.0.0.0
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
dns:
type: CoreDNS
etcd:
external:
endpoints:
- https://$ETCDHOST0:2379
- https://$ETCDHOST1:2379
- https://$ETCDHOST2:2379
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: ${K8SVERSION}
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/
serviceSubnet: 10.96.0.0/
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
EOF

base-env-config-multi-node.sh

第二种安装方式

初始化之前,登录etcd01上传etcd证书到master01上
scp -r /etc/kubernetes/pki root@172.16.100.31:/etc/kubernetes/
wget https://gitee.com/hewei8520/File/raw/master/1.13.5/init_new.sh
和第一种方式一样,确保地址一致,若不一致,请修改后注释掉wget命令在执行脚本
相当于第一种操作,第二种效率更高一些,我们可以提前把所需要用到的系统参数,变量,rpm包,配置等提前做好,在制作成镜像,包括k8s在初始化的时候,然后我们要做的就是只需要将配置分发到各个节点即可

参考资料:

Installing a pod network add-on(网络组件选择)

Setup tools kubeadm(设置工具 kubeadm)

kubeadm 线上集群部署(二) K8S Master集群安装以及工作节点的部署的更多相关文章

  1. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  2. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  3. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  4. kubeadm 线上集群部署(一) 外部 ETCD 集群搭建

      IP Hostname   192.168.1.23 k8s-etcd-01 etcd集群节点,默认关于ETCD所有操作均在此节点上操作 192.168.1.24 k8s-etcd-02 etcd ...

  5. centos8安装fastdfs6.06集群方式二之:tracker的安装/配置/运行

    一,查看本地centos的版本 [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 说 ...

  6. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  7. Redis集群(二):Redis的安装

    官方网站:http://redis.io/ 本系列撒使用的版本是:3.0.0 一.安装必要包 yum -yinstall gcc 二.linux下安装及使用(wget下载到当前目录) redis-3. ...

  8. [LintCode] Coins in a Line II 一条线上的硬币之二

    There are n coins with different value in a line. Two players take turns to take one or two coins fr ...

  9. k8s 组件介绍__单Master集群部署

    参考链接:https://github.com/opsnull/follow-me-install-kubernetes-cluster kubernetes 概述 1.kubernetes 是什么 ...

随机推荐

  1. 在CentOS7上部署 Kubernetes集群

    yum -y install  etcd docker  flannel kubenetes 一般会遇到没有k8s源的问题,先 yum update -y 看是否有效,如果还是没用就创建yum 源,再 ...

  2. 1433. [ZJOI2009]假期的宿舍【二分图】

    Description 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能 ...

  3. Day16 IO流

    流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. Ja ...

  4. c++ 堆和栈以及区别

    c++中内存分成5个区:堆.栈.自由存储区.全局\静态存储区.常量存储区 栈是一种连续存储的数据结构,具有先进后出的性质.堆是一种非连续的树形存储数据结构,每个节点有一个值,整棵树是经过排序的,特点是 ...

  5. 多线程之synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  6. (转)WebSocket的原理

    前言:无聊逛知乎,就逛到H5的栏目去了,正好看到了关于Websocket的东西.个人是比较喜欢看这类风格的,转到博客分享,以便自己以后理解. ---------------------分割线----- ...

  7. P2467 [SDOI2010]地精部落

    题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间的正整数 ...

  8. MapReduce操作Hbase --table2file

    官方手册:http://hbase.apache.org/book.html#mapreduce.example 简单的操作,将hbase表中的数据写入到文件中. RunJob 源码: import ...

  9. block本质探寻八之循环引用

    说明:阅读本文,请参照之前的block文章加以理解: 一.循环引用的本质 //代码——ARC环境 void test1() { Person *per = [[Person alloc] init]; ...

  10. Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)

    GetStreamUri:rtsp地址 鉴权:但是在使用这个接口之前是需要鉴权的.ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败.实现鉴 ...