k8s:部署k8s单master节点集群(kubeadm)v1.23.13

一、规划


1.1 收集信息

官方部署文档:
https://v1-23.docs.kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
寻找兼容的docker版本:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md#dependencies-20
寻找兼容的calico版本:
https://docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirements#kubernetes-requirements
寻找兼容的dashboard版本:
https://github.com/kubernetes/dashboard/releases

收集到的关键信息:
docker:github.com/docker/docker: v20.10.2+incompatible → v20.10.7+incompatible
calico:We test Calico v3.21 against the following Kubernetes versions.

  • v1.20
  • v1.21
  • v1.22

1.2 集群版本规划

软件版本
kubernetes1.23.13
docker-ce20.10.*
操作系统centos7.9.2009_minimal

1.3 服务器规划

角色IP
k8s-master01192.168.56.51
k8s-node01192.168.56.54
k8s-node02192.168.56.55

1.4 架构图

在这里插入图片描述

二、开始部署


2.1 系统初始化配置

# 内核升级
# 下载内核包
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
# 升级内核
yum -y localinstall ~/kernel-ml*
# 按照/boot/目录内的文件自动创建grub引导菜单
grub2-mkconfig -o /etc/grub2.cfg
# 配置默认启动内核
grub2-set-default  'CentOS Linux (4.19.12-1.el7.elrepo.x86_64) 7 (Core)'
# 列出默认启动项以确认
grub2-editenv list
# 重启生效
reboot
# 验证
uname -r

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 添加hosts
cat >> /etc/hosts << EOF

192.168.56.51 k8s-master01
192.168.56.54 k8s-node01
192.168.56.55 k8s-node02
EOF

# 时间同步
yum install ntpdate -y

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone

ntpdate time2.aliyun.com

crontab -e
*/5 * * * * ntpdate time2.aliyun.com

# 常用工具安装
yum -y install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git

# 配置limit
ulimit -SHn 65535

cat >> /etc/security/limits.conf <<EOF

* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF

# ipvs
yum -y install ipvsadm ipset sysstat conntrack libseccomp
cat >> /etc/modules-load.d/ipvs.conf <<EOF

ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
systemctl enable --now systemd-modules-load.service

# 开启k8s集群中必须的内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
sysctl --system

2.2 安装docker

注意:其它k8s版本,确认兼容的docker版本(1.1)

# 配置yum源
curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum clean all

# 安装docker
yum list docker-ce --showduplicates
yum -y install docker-ce-20.10.*

# 配置镜像下载加速器、 Cgroup Driver 配置为systemd
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://pekwusel.mirror.aliyuncs.com"],
  "exec-opts":["native.cgroupdriver=systemd"]
}
EOF

# 启动docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

2.2 安装kubeadm、kubelet、kubectl

# 配置yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 查看可安装的kubeadm、kubelet、kubectl版本
yum list kubeadm --showduplicates
yum list kubelet --showduplicates
yum list kubectl --showduplicates
# 按照规划安装v.1.23版本
yum install -y kubelet-1.23.13 kubeadm-1.23.13 kubectl-1.23.13
systemctl enable kubelet && systemctl start kubelet

2.3 初始化

2.3.1 查看所需镜像

kubeadm config images list  \
--kubernetes-version v1.23.13 \
--image-repository registry.aliyuncs.com/google_containers

2.3.2 提前拉取镜像

kubeadm config images pull  \
--kubernetes-version v1.23.13 \
--image-repository registry.aliyuncs.com/google_containers

2.3.3 初始化首台master节点

命令行方式

kubeadm init \
  --apiserver-advertise-address=192.168.56.51 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.13 \
  --pod-network-cidr=10.101.0.0/16 \
  --service-cidr=10.102.0.0/12 \
  --ignore-preflight-errors=all \
  | tee -a k8s-init.log

–apiserver-advertise-address 集群apiserver地址
–image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version K8s版本,与上面安装的一致
–service-cidr 集群内部虚拟网络,pod 统一访问入口
–pod-network-cidr pod网络,,与下面部署的cni网络组件yaml中保持一致

配置文件引导方式

cat >kubeadm.conf <<EOF
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.23.13
imageRepository: registry.aliyuncs.com/google_containers 
networking:
  podSubnet: 10.101.0.0/16 
  serviceSubnet: 10.102.0.0/16 
EOF
kubeadm init --config kubeadm.conf --ignore-preflight-errors=all  | tee -a k8s-init.log

2.4 集群管理

2.4.1 kubectl 配置

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

2.4.2 新增node节点

前提:本文 2.3 节前都已经执行

向集群添加新节点,node 节点执行在 kubeadm init 输出的 kubeadm join 命令:

kubeadm join 192.168.31.61:6443 --token 7gqt13.kncw9hg5085iwclx \
--discovery-token-ca-cert-hash sha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

2.5 部署容器网络(CNI)

注意:其它k8s版本,确认兼容的calico版本(1.1)
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案

# 修改 pod 网络与前面kubeadm init的 --pod-network-cidr指定的一样
wget https://docs.projectcalico.org/archive/v3.21/manifests/tigera-operator.yaml --no-check-certificate
kubecetl apply -f tigera-operator.yaml

# 修改 pod 网络与前面kubeadm init的 --pod-network-cidr指定的一样
wget https://docs.projectcalico.org/archive/v3.21/manifests/custom-resources.yaml --no-check-certificate
sed -i 's#      cidr: 192.168.0.0/16#      cidr: 10.101.0.0/16#g' custom-resources.yaml

# 部署calico
kubectl apply -f custom-resources.yaml

# 确认所有calico pod 都已启动
kubectl get pods -n kube-system
# 确认所有node节点已经ready
kubectl get node

2.5 集群验证

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

访问url:http://nodeip:port

2.6 安装 dashboard

Dashboard是官方提供的一个UI,可用于基本管理 k8s 资源

# 下载部署文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

# 默认 dashboad 只能集群内部访问,修改 service 为 nodeport 类型,暴露到外部
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

# 安装dashboard
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

创建 service account 并绑定默认 cluster-admin 管理员集群角色:

# 创建用户
$ kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
$ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
$ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

访问地址:https://nodeip:30001,使用输出的 token 登录 dashboard

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值