centos7.9 的kubernetes1.27部署

kubernetes1.27部署

1. 基本环境配置

kubernetes 集群ip规划

主机名IP地址说明
k8s-master192.168.5.57master节点
k8s-node01192.168.5.62worker节点

Pod网段和service和宿主机网段不要重复!!!

配置信息备注
系统版本CentOS 7.9
Docker版本 (containerd)20.10.x
Pod网段172.16.0.0/16
Service网段10.96.0.0/16

1.1 修改主机名

k8s-master

# hostnamectl set-hostname k8s-master

k8s-node01

# hostnamectl set-hostname k8s-node01

ctrl+d 退出终端重新登录 刷新变量

1.2 修改/etc/hosts

全部节点

# cat << EOF >> /etc/hosts
192.168.5.57 k8s-master
192.168.5.62 k8s-node1
EOF# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.5.57 k8s-master
192.168.5.62 k8s-node1

1.3 配置阿里云yum源

全部节点

# 从阿里云镜像站下载CentOS-Base.repo文件并保存到/etc/yum.repos.d/目录下
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 使用yum命令安装yum-utils、device-mapper-persistent-data和lvm2软件包
yum install -y yum-utils device-mapper-persistent-data lvm2# 添加Docker的yum源到yum配置管理器中
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 创建一个kubernetes.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=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# 使用sed命令删除CentOS-Base.repo文件中包含'mirrors.cloud.aliyuncs.com'和'mirrors.aliyuncs.com'的行
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

1.4 安装工具

全部节点

yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y

1.5 关闭防火墙、selinux、dnsmasq、swap。

全部节点

# 禁用并停止firewalld服务
systemctl disable --now firewalld# 禁用并停止NetworkManager服务
systemctl disable --now NetworkManager# 临时关闭SELinux
setenforce 0# 修改/etc/sysconfig/selinux文件中的SELINUX=enforcing为SELINUX=disabled
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux# 临时关闭交换分区
swapoff -a#永久关闭交换分区,把加载swap分区的那行记录注释掉即可
vi /etc/fstab 
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0

1.6 时间同步

全部节点

# 使用yum安装ntpdate软件包
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install ntpdate -y
# 设置系统时区为Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将系统时区设置为Asia/Shanghai
echo 'Asia/Shanghai' >/etc/timezone
# 同步系统时间
ntpdate time2.aliyun.com# 将ntpdate命令添加到crontab中,每5分钟执行一次
echo "*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com" >> /var/spool/cron/root

1.7 配置limit

全部节点

# 设置文件描述符限制
ulimit -SHn 65535# 编辑配置文件
cat << EOF >> /etc/security/limits.conf# 在文件末尾添加以下内容
* soft nofile 65536   # 设置软限制的最大文件描述符数为 65536
* hard nofile 131072  # 设置硬限制的最大文件描述符数为 131072
* soft nproc 65535    # 设置软限制的最大进程数为 65535
* hard nproc 655350   # 设置硬限制的最大进程数为 655350
* soft memlock unlimited   # 设置软限制的内存锁定限制为无限制
* hard memlock unlimited   # 设置硬限制的内存锁定限制为无限制EOF

1.8 升级内核

全部节点

yum update -y --exclude=kernel* && reboot

1.9 配置免密

ssh-keygen -t rsa  -f ~/.ssh/id_rsa -P ""
ssh-copy-id -i .ssh/id_rsa.pub k8s-node01

2. 内核配置

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

2.2 安装内核

全部节点

# 使用yum本地安装命令安装kernel-ml软件包
yum localinstall -y kernel-ml*

2.3 更改内核启动顺序

全部节点

# 设置默认启动的内核为第一个(索引为0)内核,并重新生成grub配置文件
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg# 使用grubby命令将user_namespace.enable=1参数添加到默认内核,并更新内核参数
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"#查看默认内核
grubby --default-kernel

2.4 安装ipvsadm

全部节点

# 使用yum命令安装ipvsadm、ipset、sysstat、conntrack、libseccomp软件包
yum install ipvsadm ipset sysstat conntrack libseccomp -y# 加载ip_vs内核模块
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack# 编辑/etc/modules-load.d/ipvs.conf文件,添加ip_vs相关模块
vim /etc/modules-load.d/ipvs.conf
# 加入以下内容
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
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip# 执行systemctl enable --now systemd-modules-load.service命令(报错不用管)
systemctl enable --now systemd-modules-load.service

2.5 配置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
net.ipv4.conf.all.route_localnet = 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=2310720net.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配置
sysctl --system#重启服务
reboot
lsmod | grep --color=auto -e ip_vs -e nf_conntrack#检查内核为4.19
uname -a

3. K8s组件和Runtime安装

3.1 安装docker

全部节点

yum install docker-ce-20.10.* docker-ce-cli-20.10.* -y 
# 将以下内容输入到 /etc/modules-load.d/containerd.conf 文件中
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF# 加载模块
modprobe -- overlay
modprobe -- br_netfilter# 将以下内容输入到 /etc/sysctl.d/99-kubernetes-cri.conf 文件中
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF# 加载内核
sysctl --system# 创建 /etc/containerd 目录
mkdir -p /etc/containerd
# 将 containerd 的默认配置写入 /etc/containerd/config.toml 文件中,并显示在终端上
containerd config default | tee /etc/containerd/config.toml# 修改 /etc/containerd/config.toml 文件,将 Containerd 的 Cgroup 配置为 Systemd
vim /etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]BinaryName = ""CriuImagePath = ""CriuPath = ""CriuWorkPath = ""IoGid = 0IoUid = 0NoNewKeyring = falseNoPivotRoot = falseRoot = ""ShimCgroup = ""SystemdCgroup = true  #修改[plugins."io.containerd.grpc.v1.cri"]device_ownership_from_security_context = falsedisable_apparmor = falsedisable_cgroup = falsedisable_hugetlb_controller = truedisable_proc_mount = falsedisable_tcp_service = trueenable_selinux = falseenable_tls_streaming = falseenable_unprivileged_icmp = falseenable_unprivileged_ports = falseignore_image_defined_volumes = falsemax_concurrent_downloads = 3max_container_log_line_size = 16384netns_mounts_under_state_dir = falserestrict_oom_score_adj = falsesandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6" #修改selinux_category_range = 1024stats_collect_period = 10stream_idle_timeout = "4h0m0s"stream_server_address = "127.0.0.1"stream_server_port = "0"systemd_cgroup = falsetolerate_missing_hugetlb_controller = trueunset_seccomp_profile = ""# 启动Containerd,并配置开机自启动:
systemctl daemon-reload
systemctl enable --now containerd# 配置crictl客户端连接的运行时位置:
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

3.2 安装Kubernetes组件

# 查看Kubernetes版本
yum list kubeadm.x86_64 --showduplicates | sort -r# 最新的Kubernetes版本
yum install kubeadm-1.27* kubelet-1.27* kubectl-1.27* -y# 设置Kubelet开机自启动,未初始化没有配置文件,报错正常
systemctl daemon-reload
systemctl enable --now kubelet

4. 集群初始化

k8s-master节点

# 导出配置文件
kubeadm config print init-defaults > kubeadm.yaml       
#修改文件
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.5.57 #修改本机ipbindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentname: k8s-master  #修改节点名字taints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #修改镜像拉取地址
kind: ClusterConfiguration
kubernetesVersion: 1.27.4  #kubeadm version一样的版本
networking:dnsDomain: cluster.localpodSubnet: 172.16.0.0/16   #pod地址serviceSubnet: 10.96.0.0/12  #service地址
scheduler: {}
#拉取镜像
kubeadm config images pull --config kubeadm.yaml
#节点初始化
kubeadm init --config kubeadm.yaml  --upload-certs#添加配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.2 初始化失败

# 重新配置
kubeadm reset -f ; ipvsadm --clear  ; rm -rf ~/.kube#查看日志
tail -f /var/log/messages | grep -v "not found"经常出错的原因:
Containerd的配置文件修改的不对,
配置问题,三个网段有交叉,出现IP地址冲突

5.加入节点

k8s-node01节点

# 初始化完成之后会提供token加入
kubeadm join 192.168.5.57:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:0a8921e4a84cdc52d17928432b0e38dae99fba3750a791e2e5e05ff00354c830 

如果token失效了

kubeadm token create --print-join-command
kubeadm init phase upload-certs  --upload-certs

6. Calico组件的安装

k8s-master节点

下载最新的版本
https://github.com/projectcalico/calico/releases/tag/v3.26.1

#解压文件
tar xf release-v3.26.1 && mv release-v3.26.1 Calico-v3.26.1#加载镜像
cd /root/Calico-v3.26.1/images
ctr image import calico-cni.tar
ctr image import calico-dikastes.tar
ctr image import calico-flannel-migration-controller.tar
ctr image import calico-kube-controllers.tar
ctr image import calico-node.tar
ctr image import calico-pod2daemon.tar
ctr image import calico-typha.tar#运行tigera-operator.yaml和custom-resources.yaml
cd /root/Calico-v3.26.1/manifests
kubectl create -f tigera-operator.yaml
#查看pod地址
cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr= | awk -F= '{print $NF}'
#修改custom-resources.yaml文件pod地址
vim custom-resources.yamlapiVersion: operator.tigera.io/v1
kind: Installation
metadata:name: default
spec:# Configures Calico networking.calicoNetwork:# Note: The ipPools section cannot be modified post-install.ipPools:- blockSize: 26cidr: 172.16.0.0/16  #修改encapsulation: VXLANCrossSubnetnatOutgoing: EnablednodeSelector: all()
---
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:name: default
spec: {}

等待部署完成

# kubectl get node
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   15h   v1.27.4
k8s-node01   Ready    <none>          15h   v1.27.4

等待全部容器为running

# kubectl get pod -A -owide
NAMESPACE          NAME                                      READY   STATUS    RESTARTS      AGE   IP               NODE         NOMINATED NODE   READINESS GATES
calico-apiserver   calico-apiserver-59bfd5d6fd-2bmks         1/1     Running   0             58m   172.16.85.194    k8s-node01   <none>           <none>
calico-apiserver   calico-apiserver-59bfd5d6fd-wkklj         1/1     Running   0             58m   172.16.235.197   k8s-master   <none>           <none>
calico-system      calico-kube-controllers-668f76f65-cwddb   1/1     Running   0             61m   172.16.235.193   k8s-master   <none>           <none>
calico-system      calico-node-cdrw8                         1/1     Running   0             61m   192.168.5.62     k8s-node01   <none>           <none>
calico-system      calico-node-hkqvz                         1/1     Running   0             61m   192.168.5.57     k8s-master   <none>           <none>
calico-system      calico-typha-667dd89665-5jffc             1/1     Running   0             61m   192.168.5.62     k8s-node01   <none>           <none>
calico-system      csi-node-driver-grwtd                     2/2     Running   0             61m   172.16.235.194   k8s-master   <none>           <none>
calico-system      csi-node-driver-hr4zq                     2/2     Running   0             61m   172.16.85.193    k8s-node01   <none>           <none>
kube-system        coredns-65dcc469f7-8mktj                  1/1     Running   0             16h   172.16.235.195   k8s-master   <none>           <none>
kube-system        coredns-65dcc469f7-xbbgp                  1/1     Running   0             16h   172.16.235.196   k8s-master   <none>           <none>
kube-system        etcd-k8s-master                           1/1     Running   0             16h   192.168.5.57     k8s-master   <none>           <none>
kube-system        kube-apiserver-k8s-master                 1/1     Running   0             16h   192.168.5.57     k8s-master   <none>           <none>
kube-system        kube-controller-manager-k8s-master        1/1     Running   0             16h   192.168.5.57     k8s-master   <none>           <none>
kube-system        kube-proxy-9dqh9                          1/1     Running   0             16h   192.168.5.62     k8s-node01   <none>           <none>
kube-system        kube-proxy-l6rc7                          1/1     Running   0             16h   192.168.5.57     k8s-master   <none>           <none>
kube-system        kube-scheduler-k8s-master                 1/1     Running   0             16h   192.168.5.57     k8s-master   <none>           <none>
tigera-operator    tigera-operator-5f4668786-g8jpk           1/1     Running   1 (64m ago)   67m   192.168.5.62     k8s-node01   <none>           <none>

7.Metrics部署

在新版的Kubernetes中系统资源的采集均使用Metrics-server,可以通过Metrics采集节点和Pod的内存、磁盘、CPU和网络的使用率。

k8s-master节点

# 下载文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml#更换文件的镜像为国内镜像 避免无法拉取
vim components.yaml
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3

添加证书(全部节点操作)

vim /var/lib/kubelet/config.yaml
#在最下面添加
serverTLSBootstrap: true

请添加图片描述

# 重启kubelet
systemctl restart kubelet  #签名申请
kubectl get csr  # 查看到几个签名几个
kubectl certificate approve csr-nkn79
kubectl certificate approve csr-tk7tz 

8.dashboard部署

k8s-master节点

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml  #修改svc模式
kubectl edit svc -n kubernetes-dashboard   kubernetes-dashboard  apiVersion: v1
kind: Service
metadata:creationTimestamp: "2023-07-25T03:26:48Z"labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboardresourceVersion: "95886"uid: 72e702f8-c19c-4bdc-b8ff-251deb1fa419
spec:clusterIP: 10.106.23.99clusterIPs:- 10.106.23.99externalTrafficPolicy: ClusterinternalTrafficPolicy: ClusteripFamilies:- IPv4ipFamilyPolicy: SingleStackports:- nodePort: 31061port: 443protocol: TCPtargetPort: 8443selector:k8s-app: kubernetes-dashboardsessionAffinity: Nonetype: NodePort #修改
status:loadBalancer: {}# 网页访问
kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.102.249.83   <none>        8000/TCP        82m
kubernetes-dashboard        NodePort    10.106.23.99    <none>        443:31061/TCP   82m

网页登录
https://192.168.5.57:31061/#/login

给予权限

kubectl create clusterrolebinding dashboardcrbinding --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard

获取token

kubectl create token  -n kubernetes-dashboard kubernetes-dashboard

9.Kube-proxy改为ipvs模式

修改configmap

 kubectl edit cm kube-proxy -n kube-system

请添加图片描述

更新pod

kubectl patch daemonset kube-proxy -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}" -n kube-system

验证

curl 127.0.0.1:10249/proxyMode


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部