资讯专栏INFORMATION COLUMN

kubeadm搭建高可用集群

社区管理员 / 312人阅读

kubeadm是官方的一个用来管理k8s集群的工具

kubeadm,虽然是官方的是使用起来也不是很方便,他需要在每个节点上进行安装,在大规模的时候需要借助其他工具

环境信息说明

  • 4台2c2g虚拟机,官方要求最少2c4g但是我的机器没这么高配置,如果仅仅是学习的话够用了

  • 系统为centos7

  • lb方案为了方便使用hosts文件,生产环境请使用lvs,haproxy,nginx等方案

  • 默认为最新版本

节点初始化

所有节点无论master和node

设置主机名字和PS1为主机IP

为了方便统一设置主机名为ip地址

echo 'export PS1="[\u@\H \W]\$ "' >> .bashrcIP=$(ip addr show $(ip route |grep default |awk '{print$5}') |grep -w inet |awk -F '[ /]+' '{print $3}')hostnamectl set-hostname $IP
关闭swap交换分区
# 临时关闭swapoff -a# 永久关闭sed -ri 's/.*swap.*/#&/' /etc/fstab
关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disable/g' /etc/selinux/config
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
同步时间
ntpdate cn.pool.ntp.org
yum源

默认源很慢,改为阿里云的

修改centos7源为阿里云
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
修改centos7 epel源为阿里云
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装k8s源

官方的国内不可用,使用阿里云的

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
安装CRI
安装docker

k8s 1.24之后无法直接支持docker,需要安装cri-dockerd

# 添加配置文件cat <<EOF > /etc/docker/daemon.json {
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "3"
    },
    "exec-opts": ["native.cgroupdriver=systemd"],
    "live-restore": true,
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "registry-mirrors": ["http://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"],
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ]
}
EOF# 安装dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun# 重启dockersystemctl restart docker && systemctl enable docker
安装containerd
# 加载内核模块cat << EOF > /etc/modules-load.d/containerd.confoverlay
br_netfilter
EOFmodprobe overlay
modprobe br_netfilter
# 使用阿里的源wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install containerd.io-1.6.6-3.1.el7.x86_64.rpm
安装k8s组件
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet# ipvs模式推荐安装yum install -y ipvsadm

安装master

# 执行master节点初始化kubeadm init \
    --control-plane-endpoint "k8s-api:6443" \
    --upload-certs \
    --image-repository registry.aliyuncs.com/google_containers \
    --pod-network-cidr=172.16.1.0/16 \
    --v=6# 初始化完成之后会打印出加入集群的命令

加入集群的命令可以使用kubeadm重新获取,参考后面kubeadm

其他两个master节点
kubeadm join k8s-api:6443 --token iq5o5t.8mtwj9117qhed25p \
       --discovery-token-ca-cert-hash sha256:95fda448e3cb56303efc3bccbc785e000c3124a9a045ff2ed33c854cb9ee3108 \
       --control-plane --certificate-key f075fe20e799440297bf9bd48942134da1c95f1c00ef94d7d208a2a66ce87bda

安装工作节点

kubeadm join k8s-api:6443 --token iq5o5t.8mtwj9117qhed25p \
        --discovery-token-ca-cert-hash sha256:95fda448e3cb56303efc3bccbc785e000c3124a9a045ff2ed33c854cb9ee3108

cni

k8s支持很多cni,这里使用了最简单的flannel

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

清理master上的污点

默认安装完成之后master是有污点的

kubectl taint nodes <节点名字> node-role.kubernetes.io/master:NoSchedule-

metrics-server

metrics-server提供了最基础的metrics手机,使用kubectl top和hpa时需要他,当然也可以使用kube-prometheus代理

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

ingress

ingress官方只是定义了crd,具体实现由第三方实现,这里使用了常见的nginx-ingreses

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml# 使用helmhelm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx

dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
删除清理

master要保持奇数!

  • 驱逐节点上的pod

kubectl drain <节点> --delete-local-data --force --ignore-daemonsets
  • 删除节点

kubectl delete <节点>
  • 在要删除的节点上执行

kubeadm reset
  • 清理iptables规则

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
  • 如果使用了ipvs模式

ipvsadm -C
  • 清理安装目录和文件

rm -rf ~/.kuberm -rf /opt/cnirm -rf /etc/cnirm -rf /etc/kubernetesrm -rf /var/etcd # master节点才有
  • 卸载组件

yum remove kube*
  • 重启

reboot
升级版本

k8s升级版本最大不能跨越两个次版本,其版本通过二进制的版本来确定要通过kubeadm去每个节点上执行

master节点
yum -y update kubeadm kubelet kubectl# 验证版本kubeadm version# 查看升级计划kubeadm upgrade plan# 执行升级sudo kubeadm upgrade apply v1.y.x# 其他的mastersudo kubeadm upgrade node
工作节点
  • 驱逐节点上pod

kubectl drain <节点> --delete-local-data --force --ignore-daemonsets
  • 升级节点

yum update -y kubelet

systemctl restart kubelet
  • 恢复节点

kubectl uncordon <节点>
其他
  • 查看cni是不是需要根据版本升级

  • dashboard等k8s应用升级

kubeadm常用命令

# 打印默认的初始化配置kubeadm config print init-defaults > kubeadm-config.yaml# 使用配置文件来初始化集群kubeadm init --config kubeadm-config.yaml# 查看所需要的镜像列表kubeadm config images list# 下载默认配置的镜像kubeadm config images pull# 由于国内无法访问gcr.io,可以指定仓库,这里使用了阿里的镜像kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version latest# 获取keykubeadm init phase upload-certs --upload-certs# 获取加入节点的命令kubeadm token create --print-join-command --ttl 0# 将获取的key组合成添加master的命令kubeadm join k8s-api:6443 
--token <token> \--discovery-token-ca-cert-hash <cert>\--control-plane \--certificate-key <key> \--v=6# kubeadm init 和 kubeadm join 如果cpu配置太低可以使用下面的参数忽略--ignore-preflight-errors=Mem,NumCPU# 查看证书时间kubeadm  certs check-expiration


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127896.html

相关文章

  • Kubernetes1.14版本亮点新功能

    摘要:当服务器可以作为节点以后,用户可以在容器中运行基于平台的应用了比如程序等这也使得成为第一个全功能的跨平台集群管理工具。同时,新解决方案还采用了临时密钥来加强节点间证书传递的安全性。 部分翻译自https://sysdig.com/blog/whats... Kubernetes 1.14的亮点新功能: 支持Windows容器服务 可以通过kubeadm动态地创建一个高可用集群 将ku...

    skinner 评论0 收藏0
  • Keepalived & LVS 建高可用的Web服务

    摘要:也就是说,在使用模式下,仅仅在负载均衡器上做配置是无法实现负载均衡的。之所以子网掩码时或者,是让其广播地址是其自身,避免其发送到该子网的广播域,防止负载均衡器上的和服务器的冲突。 在本文中,我将会讲述如何在Centos 7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示 showImg(https://segmentfault.co...

    sunsmell 评论0 收藏0
  • Keepalived & LVS 建高可用的Web服务

    摘要:也就是说,在使用模式下,仅仅在负载均衡器上做配置是无法实现负载均衡的。之所以子网掩码时或者,是让其广播地址是其自身,避免其发送到该子网的广播域,防止负载均衡器上的和服务器的冲突。 在本文中,我将会讲述如何在Centos 7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示 showImg(https://segmentfault.co...

    springDevBird 评论0 收藏0
  • 建高吞吐量 Kafka 分布式发布订阅消息 集群

    摘要:搭建高吞吐量分布式发布订阅消息集群简介是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区多副本冗余,因此被广泛用于大规模消息数据处理应用。 搭建高吞吐量 Kafka 分布式发布订阅消息 集群 简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同...

    toddmark 评论0 收藏0
  • etcd 集群运维实践

    摘要:是集群的数据核心,最严重的情况是,当出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕相关的运维知识就比较重要,可以容器化部署,也可以在宿主机自行搭建,以下内容是通用的。 etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕 etcd 相关的运维知识就比较重要...

    pcChao 评论0 收藏0
  • etcd 集群运维实践

    摘要:是集群的数据核心,最严重的情况是,当出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕相关的运维知识就比较重要,可以容器化部署,也可以在宿主机自行搭建,以下内容是通用的。 etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕 etcd 相关的运维知识就比较重要...

    Noodles 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<