安装kubernetes集群-灵活安装k8s各个版本高可用集群(上)

简介: 安装kubernetes集群-灵活安装k8s各个版本高可用集群

前言

这篇文章会带领大家去安装k8s1.18的高可用集群,如果你是初学小白,只要跟着做,也能保证100%完成安装,下面开始我们的安装之旅吧,内容较多,都是干货

心灵鸡汤

如果你觉得累,请看看下面这段话:我们想要去的地方,永远没有捷径,只有脚踏实地,一步一个脚印的才能走向诗和远方!

资料下载

1.下文需要的yaml文件所在的github地址如下,下面github上标注的是1.17,但是1.18版本也可以用,大家直接使用即可:

https://github.com/luckylucky421/kubernetes1.17.3/tree/master

大家可以把我的github仓库fork到你们自己的仓库里,这样就可以永久保存了,下面提供的yaml访问地址如果不能访问,那么就把这个github上的内容clone和下载到自己电脑

2.下文里提到的初始化k8s集群需要的镜像获取方式:镜像在百度网盘,链接如下:

链接:https://pan.baidu.com/s/1k1heJy8lLnDk2JEFyRyJdA

提取码:udkj

正文

一、准备实验环境

1.准备两台centos7虚拟机,用来安装k8s集群,下面是两台虚拟机的配置情况

master1(192.168.0.6)配置:

操作系统:centos7.6以及更高版本都可以配置:4核cpu,8G内存,两块60G硬盘

网络:桥接网络

node1(192.168.0.56)配置:

操作系统:centos7.6以及更高版本都可以配置:4核cpu,6G内存,两块60G硬盘

网络:桥接网络

二、初始化实验环境

1.配置静态ip

把虚拟机或者物理机配置成静态ip地址,这样机器重新启动后ip地址也不会发生改变。

1.1 在master1节点配置网络


修改/etc/sysconfig/network-scripts/ifcfg-ens33文件,变成如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.0.6
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes

修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

service network restart

 

注:ifcfg-ens33文件配置解释:

IPADDR=192.168.0.6

#ip地址,需要跟自己电脑所在网段一致

NETMASK=255.255.255.0

#子网掩码,需要跟自己电脑所在网段一致

GATEWAY=192.168.0.1

#网关,在自己电脑打开cmd,输入ipconfig /all可看到

DNS1=192.168.0.1  

#DNS,在自己电脑打开cmd,输入ipconfig /all可看到

 

1.2 在node1节点配置网络

修改/etc/sysconfig/network-scripts/ifcfg-ens33文件,变成如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.0.56
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes

修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

service network restart

 

2.修改yum源,各个节点操作

(1)备份原来的yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

(2)下载阿里的yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

(3)生成新的yum缓存

yum makecache fast

(4)配置安装k8s需要的yum源

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=0
EOF

(5)清理yum缓存

yum clean all

(6)生成新的yum缓存

yum makecache fast

(7)更新yum源

yum -y update

(8)安装软件包

yum -y install yum-utils device-mapper-persistent-data  lvm2

(9)添加新的软件源

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

yum clean all

yum makecache fast

3.安装基础软件包,各个节点操作

yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntplibaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate

4.关闭firewalld防火墙,各个节点操作,centos7系统默认使用的是firewalld防火墙,停止firewalld防火墙,并禁用这个服务

systemctl stopfirewalld  && systemctl  disable firewalld

5.安装iptables,各个节点操作,如果你用firewalld不是很习惯,可以安装iptables,这个步骤可以不做,根据大家实际需求

5.1 安装iptables

yum install iptables-services -y

5.2 禁用iptables

service iptables stop  && systemctl disable iptables

6.时间同步,各个节点操作

6.1 时间同步

ntpdate cn.pool.ntp.org

6.2 编辑计划任务,每小时做一次同步

1)crontab -e

* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

2)重启crond服务:

service crond restart

7. 关闭selinux,各个节点操作

关闭selinux,设置永久关闭,这样重启机器selinux也处于关闭状态

修改/etc/sysconfig/selinux和/etc/selinux/config文件,把

SELINUX=enforcing变成SELINUX=disabled,也可用下面方式修改:


sed -i  's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

 

上面文件修改之后,需要重启虚拟机,可以强制重启:

reboot -f

 

8.关闭交换分区,各个节点操作

swapoff  -a
#永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab

9.修改内核参数,各个节点操作

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

10.修改主机名

在192.168.0.6上:
hostnamectl set-hostname master1
在192.168.0.56上:
hostnamectl set-hostname node1

11.配置hosts文件,各个节点操作

在/etc/hosts文件增加如下几行:
192.168.0.6 master1
192.168.0.56 node1

12.配置master1到node1无密码登陆,配置master1到node1无密码登陆

在master1上操作
ssh-keygen -t rsa
#一直回车就可以
cd /root && ssh-copy-id -i .ssh/id_rsa.pub root@node1
#上面需要输入yes之后,输入密码,输入node1物理机密码即可


三、安装kubernetes1.18.2单master节点的高可用集群

1.安装docker19.03,各个节点操作

1.1 查看支持的docker版本

yum list docker-ce --showduplicates |sort -r

1.2 安装19.03.7版本

yum install -y docker-ce-19.03.7-3.el7

systemctl enable docker && systemctl start docker

#查看docker状态,如果状态是active(running),说明docker是正常运行状态

systemctl status docker

1.3 修改docker配置文件

cat > /etc/docker/daemon.json <<EOF
{
 "exec-opts":["native.cgroupdriver=systemd"],
 "log-driver":"json-file",
 "log-opts": {
  "max-size": "100m"
  },
 "storage-driver":"overlay2",
 "storage-opts": [
  "overlay2.override_kernel_check=true"
  ]
}
EOF

1.4 重启docker使配置生效

systemctl daemon-reload && systemctl restartdocker

1.5 设置网桥包经IPTables,core文件生成路径,配置永久生效

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >/proc/sys/net/bridge/bridge-nf-call-ip6tables
echo """
vm.swappiness = 0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
""" > /etc/sysctl.conf
sysctl -p

1.6 开启ipvs,不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rrip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sedip_vs_ftp nf_conntrack"
for kernel_module in \${ipvs_modules}; do
 /sbin/modinfo -Ffilename \${kernel_module} > /dev/null 2>&1
 if [ $? -eq 0 ];then
 /sbin/modprobe\${kernel_module}
 fi
done
EOF
modprobe ip_vs
chmod 755 /etc/sysconfig/modules/ipvs.modules &&bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

 

2.安装kubernetes1.18.6

2.1在master1和node1上安装kubeadm和kubelet

yum install kubeadm-1.18.6 kubelet-1.18.6 -y

systemctl enable kubelet


初始化k8s集群

kubeadm init  --kubernetes-version=v1.18.6  --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.6 --image-repository registry.aliyuncs.com/google_containers


注:

--image-repository registry.aliyuncs.com/google_containers是指定阿里云的镜像源,基于这个我们可以安装任何版本的k8s; 
--kubernetes-version=v1.18.6是指定k8s版本

初始化命令执行成功之后显示如下内容,说明初始化成功了

Your Kubernetes control-plane has initialized successfully!

 

To start using your cluster, you need to run the following as a regularuser:

 

 mkdir -p $HOME/.kube

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

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

 

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the optionslisted at:

 https://kubernetes.io/docs/concepts/cluster-administration/addons/

 

Then you can join any number of worker nodes by running the following oneach as root:

 

kubeadm join 192.168.0.6:6443 --token si1c9n.3c5os94xcuzq6wl3 \

--discovery-token-ca-cert-hashsha256:9d3a35eab0f6badba61ebb833d420902e4f9e0168ee1c1374121668ab382a596

 

注:kubeadm join ... 这条命令需要记住,我们把k8s的node1节点加入到集群需要在这些节点节点输入这条命令,每次执行这个结果都是不一样的,大家记住自己执行的结果,在下面会用到

 

2.2 在master1节点执行如下,这样才能有权限操作k8s资源

mkdir -p $HOME/.kube

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

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

 

在master1节点执行

kubectl get nodes

显示如下,master1节点是NotReady

NAME     STATUS     ROLES    AGE    VERSION master1   NotReady   master   8m11s   v1.18.6

 

kubectl get pods -n kube-system

显示如下,可看到cordns也是处于pending状态

coredns-7ff77c879f-j48h6              0/1    Pending  0          3m16scoredns-7ff77c879f-lrb77         0/1    Pending  0          3m16s

上面可以看到STATUS状态是NotReady,cordns是pending,是因为没有安装网络插件,需要安装calico或者flannel,接下来我们安装calico,在master1节点安装calico网络插件:

 

安装calico需要的镜像是quay.io/calico/cni:v3.5.3和quay.io/calico/node:v3.5.3,镜像在文章开头处的百度网盘地址

手动上传上面两个镜像的压缩包到各个节点,通过docker load -i解压

docker load -i   cni.tar.gz
docker load -i   calico-node.tar.gz

 

在master1节点执行如下

kubectl apply -f calico.yaml

calico.yaml文件内容在如下提供的地址,打开下面链接可复制内容:

https://raw.githubusercontent.com/luckylucky421/kubernetes1.17.3/master/calico.yaml


如果打不开上面的链接,可以访问下面的github地址,把下面的目录clone和下载下来,解压之后,在把文件传到master1节点即可

https://github.com/luckylucky421/kubernetes1.17.3/tree/master

在master1节点执行

kubectl get nodes

显示如下,看到STATUS是Ready

NAME    STATUS   ROLES    AGE  VERSION

master1  Ready    master   98m  v1.18.6

kubectl get pods -n kube-system

看到cordns也是running状态,说明master1节点的calico安装完成

NAME                           READY   STATUS   RESTARTS   AGE
calico-node-6rvqm               1/1     Running  0          17m
coredns-7ff77c879f-j48h6        1/1    Running   0          97m
coredns-7ff77c879f-lrb77        1/1    Running   0          97m
etcd-master1                    1/1     Running  0          97m
kube-apiserver-master1          1/1     Running  0          97m
kube-controller-manager-master1 1/1     Running  0          97m
kube-proxy-njft6                1/1     Running  0          97m
kube-scheduler-master1          1/1     Running  0          97m

2.3 把node1节点加入到k8s集群,在node1节点操作

kubeadm join 192.168.0.6:6443 --token si1c9n.3c5os94xcuzq6wl3 \

--discovery-token-ca-cert-hashsha256:9d3a35eab0f6badba61ebb833d420902e4f9e0168ee1c1374121668ab382a596

注:上面的这个加入到k8s节点的一串命令kubeadm join就是在2.4初始化的时候生成的

2.8 在master1节点查看集群节点状态

kubectl get nodes  

显示如下:

NAME       STATUS     ROLES    AGE   VERSION

master1    Ready   master   3m36s v1.18.6

node1      Ready      3m36s v1.18.6

说明node1节点也加入到k8s集群了,通过以上就完成了k8s单master高可用集群的搭建

2.4 安装traefik

官网:https://docs.traefik.io/

把traefik镜像上传到各个节点,按照如下方法通过docker load -i解压,镜像地址在文章开头处的百度网盘里,可自行下载

docker load -i  traefik_1_7_9.tar.gz

traefik用到的镜像是k8s.gcr.io/traefik:1.7.9

1)生成traefik证书,在master1上操作

mkdir  ~/ikube/tls/ -p
echo """
[req]
distinguished_name = req_distinguished_name
prompt = yes
[ req_distinguished_name ]
countryName                    = Country Name (2 letter code)
countryName_value               = CN
stateOrProvinceName             = State orProvince Name (full name)
stateOrProvinceName_value       = Beijing
localityName                   = Locality Name (eg, city)
localityName_value              =Haidian
organizationName                =Organization Name (eg, company)
organizationName_value          = Channelsoft
organizationalUnitName          = OrganizationalUnit Name (eg, section)
organizationalUnitName_value    = R & D Department
commonName                     = Common Name (eg, your name or your server\'s hostname)
commonName_value                =*.multi.io
emailAddress                   = Email Address
emailAddress_value              =lentil1016@gmail.com
""" > ~/ikube/tls/openssl.cnf
openssl req -newkey rsa:4096 -nodes -config ~/ikube/tls/openssl.cnf -days3650 -x509 -out ~/ikube/tls/tls.crt -keyout ~/ikube/tls/tls.key
kubectl create -n kube-system secret tls ssl --cert ~/ikube/tls/tls.crt--key ~/ikube/tls/tls.key

 

2)执行yaml文件,创建traefik

kubectl apply -f traefik.yaml

traefik.yaml文件内容在如下链接地址处复制:

https://raw.githubusercontent.com/luckylucky421/kubernetes1.17.3/master/traefik.yaml

上面如果访问不了,可以访问下面的链接,然后把下面的分支克隆和下载,手动把yaml文件传到master1上即可:

https://github.com/luckylucky421/kubernetes1.17.3

3)查看traefik是否部署成功:

kubectl get pods -n kube-system
traefik-ingress-controller-csbp8  1/1     Running   0         5s
traefik-ingress-controller-hqkwf  1/1     Running   0         5s
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
232 19
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
148 12
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
686 10
|
2月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
87 2
|
缓存 Kubernetes 数据安全/隐私保护
k8s1.18多master节点高可用集群安装-超详细中文官方文档
k8s1.18多master节点高可用集群安装-超详细中文官方文档
|
9月前
|
Kubernetes 负载均衡 监控
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
|
Kubernetes Linux 网络安全
k8s1.18高可用集群安装-超详细中文官方文档
k8s1.18高可用集群安装-超详细中文官方文档

热门文章

最新文章