kubeadm是官方的一个用来管理k8s集群的工具
kubeadm,虽然是官方的是使用起来也不是很方便,他需要在每个节点上进行安装,在大规模的时候需要借助其他工具
4台2c2g虚拟机,官方要求最少2c4g但是我的机器没这么高配置,如果仅仅是学习的话够用了
系统为centos7
lb方案为了方便使用hosts文件,生产环境请使用lvs,haproxy,nginx等方案
默认为最新版本
所有节点无论master和node
为了方便统一设置主机名为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
# 临时关闭swapoff -a# 永久关闭sed -ri 's/.*swap.*/#&/' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disable/g' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld
ntpdate cn.pool.ntp.org
默认源很慢,改为阿里云的
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
官方的国内不可用,使用阿里云的
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
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
# 加载内核模块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
yum install -y kubelet kubeadm kubectl systemctl enable kubelet && systemctl start kubelet# ipvs模式推荐安装yum install -y ipvsadm
# 执行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
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
k8s支持很多cni,这里使用了最简单的flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
默认安装完成之后master是有污点的
kubectl taint nodes <节点名字> node-role.kubernetes.io/master:NoSchedule-
metrics-server提供了最基础的metrics手机,使用
kubectl top
和hpa时需要他,当然也可以使用kube-prometheus代理
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
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
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去每个节点上执行
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 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
摘要:当服务器可以作为节点以后,用户可以在容器中运行基于平台的应用了比如程序等这也使得成为第一个全功能的跨平台集群管理工具。同时,新解决方案还采用了临时密钥来加强节点间证书传递的安全性。 部分翻译自https://sysdig.com/blog/whats... Kubernetes 1.14的亮点新功能: 支持Windows容器服务 可以通过kubeadm动态地创建一个高可用集群 将ku...
摘要:也就是说,在使用模式下,仅仅在负载均衡器上做配置是无法实现负载均衡的。之所以子网掩码时或者,是让其广播地址是其自身,避免其发送到该子网的广播域,防止负载均衡器上的和服务器的冲突。 在本文中,我将会讲述如何在Centos 7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示 showImg(https://segmentfault.co...
摘要:也就是说,在使用模式下,仅仅在负载均衡器上做配置是无法实现负载均衡的。之所以子网掩码时或者,是让其广播地址是其自身,避免其发送到该子网的广播域,防止负载均衡器上的和服务器的冲突。 在本文中,我将会讲述如何在Centos 7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示 showImg(https://segmentfault.co...
摘要:搭建高吞吐量分布式发布订阅消息集群简介是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区多副本冗余,因此被广泛用于大规模消息数据处理应用。 搭建高吞吐量 Kafka 分布式发布订阅消息 集群 简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同...
摘要:是集群的数据核心,最严重的情况是,当出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕相关的运维知识就比较重要,可以容器化部署,也可以在宿主机自行搭建,以下内容是通用的。 etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕 etcd 相关的运维知识就比较重要...
摘要:是集群的数据核心,最严重的情况是,当出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕相关的运维知识就比较重要,可以容器化部署,也可以在宿主机自行搭建,以下内容是通用的。 etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境。因此围绕 etcd 相关的运维知识就比较重要...
阅读 1285·2024-02-01 10:43
阅读 370·2024-01-31 14:58
阅读 432·2024-01-31 14:54
阅读 815·2024-01-29 17:11
阅读 2205·2024-01-25 14:55
阅读 1481·2023-06-02 13:36
阅读 2085·2023-05-23 10:26
阅读 469·2023-05-23 10:25