k8s1.24.2 部署

Kubernetes部署环境要求
1)一台或多台机器,操作系统CentOS 7.x-86_x64 (本教程采用CentOS 7.9-86_x64)
2)硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
3)集群内各个机器之间能相互通信;
4)集群内各个机器可以访问外网,需要拉取镜像;
5)禁止swap分区;

1.设置主机名和时区
timedatectl set-timezone Asia/Shanghai     #都要执行
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-worker01
hostnamectl set-hostname k8s-worker02

==> ping 域名,ping不通重启虚拟机

2.添加hosts网络主机配置,三台虚拟机都要设置
vim /etc/hosts

3.关闭防火墙,三台虚拟机都要设置,生产环境跳过这一步
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
==> firewall-cmd --state

4.修改SELINUX配置
==> getenforce  Enforcing
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
==> getenforce     Enforcing  
==> 重启虚拟机, getenforce  Disabled

5.时间同步NTP
------------------------------
所有节点
------------------------------
使用root用户编辑文件/etc/sysconfig/ntpd,插入以下内容实现硬件时间和系统时间一起同步
SYNC_HWCLOCK=yes

------------------------------
主节点master
------------------------------
主节点安装ntp: yum -y install ntp
先注释四个server  然后添加server主机ip:vi /etc/ntp.conf
a)授权当前网段内所有主机可通过此主机查询和同步时间(但不允许客户端修改服务器时间)
restrict 192.168.126.132 mask 255.255.255.0 nomodify (★★★★★所有节点配置)
b)设置无网络连接时使用当前主机的硬件时钟为准提供时间同步
server 127.127.1.0 (★★★★★从节点不要配置)
c)启动nptd: systemctl start|status|restart ntpd
==> systemctl status ntpd
------------------------------
从节点slave
------------------------------
a)启动crond,关闭ntpd
systemctl stop ntpd
systemctl disable ntpd
systemctl start crond
systemctl enable crond.service
systemctl status crond

# 从节点同步主节点时间,主节点可以通过ntpd同步time1.aliyun.com时间
crontab -l
crontab -e
0 */1 * * * /usr/sbin/ntpdate k8s-master01

#设置好crond定时任务后,测试发现不生效,查看crond日志:tail -n 100 /var/log/cron
发现日志提示: @reboot jobs will be run at computer's startup.
==> 重启测试crontab是否生效,最终发现是cron表达式有问题,设置每一小时同步一次
*/1 * * * * /usr/sbin/ntpdate k8s-master01 (每一分钟同步一次)

6.关闭swap
==> free -m
# 临时关闭
swapoff -a
# 永久关闭(需要重启操作系统)
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
或者采用如下方法: 
cat /etc/fstab ...... 
/dev/mapper/centos-swap swap swap defaults 0 0 
在上一行中行首添加#

7.修改linux的内核采纳数,添加网桥过滤和地址转发功能
a)编辑/etc/sysctl.d/k8s.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
b)加载br_netfilter模块 
modprobe br_netfilter
c)查看是否加载 
lsmod | grep br_netfilter
d)加载网桥过滤及内核转发配置文件 (内核生效)
sysctl -p /etc/sysctl.d/k8s.conf

8.安装ipset及ipvsadm (所有主机均需操作)
a)安装ipset及ipvsadm 
yum -y install ipset ipvsadm
b)配置ipvsadm模块加载方式 
添加需要加载的模块 
cat > /etc/sysconfig/modules/ipvs.modules <<EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack 
EOF
c)授权、运行、检查是否加载 
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

9.配置免密登录(SSH)
a)生成密钥
ssh-keygen -t rsa
b)进入.ssh文件夹
cd ~/.ssh
c)发放其他主机
ssh-copy-id 主机名

10.Docker安装
9.1 Docker安装YUM源准备(使用阿里云开源软件镜像站)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
建议使用清华镜像源,官方提供的镜像源由于网速原因下载较慢
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo --no-check-certificate
9.2 Docker安装
a)查看docker-ce版本并对版本进行排序
yum list docker-ce.x86_64 --showduplicates | sort -r
b)安装docker-ce
yum -y install docker-ce
版本查看
docker version
9.3 启动Docker服务
systemctl enable --now docker
9.4 修改cgroup方式
/etc/docker/daemon.json 默认没有此文件,需要单独创建
cat /etc/docker/daemon.json 

    "exec-opts": ["native.cgroupdriver=systemd"] 
}
systemctl restart docker

11.kubernetes集群镜像准备
a)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
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
b)验证YUM源是否可用
# yum list | grep kubeadm
显示:kubeadm.x86_64     1.24.4-0   kubernetes
c)安装Kubernetes组件
Kubelet:运行在cluster所有节点上,负责启动POD和容器;
Kubeadm:用于初始化cluster的一个工具;
Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;
# yum install kubelet kubeadm kubectl
d)配置kubelet的cgroup,如果不配置可能导致k8s集群无法启动
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容:
# vim /etc/sysconfig/kubelet
添加下面的配置:
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
e)设置kubelet开机自启
systemctl enable kubelet

f)集群镜像准备
# kubeadm config images list --kubernetes-version=v1.24.0 
k8s.gcr.io/kube-apiserver:v1.24.0 
k8s.gcr.io/kube-controller-manager:v1.24.0 
k8s.gcr.io/kube-scheduler:v1.24.0 
k8s.gcr.io/kube-proxy:v1.24.0 
k8s.gcr.io/pause:3.7 
k8s.gcr.io/etcd:3.5.3-0 
k8s.gcr.io/coredns/coredns:v1.8.6

导入到image_download.sh,并改为可执行文件
# mkdir -p /opt/k8s/bin && cd /opt/k8s/bin && pwd
# kubeadm config images list --kubernetes-version=v1.24.0 >> image_download.sh
# chmod 755 image_download.sh && ll image_download.sh
修改文件内容如下:
# vim image_download.sh 
#!/bin/bash 
images_list='k8s.gcr.io/kube-apiserver:v1.24.0 
k8s.gcr.io/kube-controller-manager:v1.24.0 
k8s.gcr.io/kube-scheduler:v1.24.0 
k8s.gcr.io/kube-proxy:v1.24.0 
k8s.gcr.io/pause:3.7 
k8s.gcr.io/etcd:3.5.3-0 
k8s.gcr.io/coredns/coredns:v1.8.6' 
for i in $images_list 
do 
    docker pull $i 
done 
save -o k8s-1-24-0.tar $images_list

[谷歌开源镜像需要VPN,这种方法拉去不到镜像,改用以下方法]

------------------------------------------------------------------------------------
拉取本人已经上传到docker hub上公开的k8s镜像安装,重新制作执行文件:k8s_pull.sh
------------------------------------------------------------------------------------
# mkdir -p /opt/k8s/bin && cd /opt/k8s/bin && pwd
# vim k8s_pull.sh 
#!/bin/bash 
images_list='haibozhangdocker/kube-apiserver:v1.24.2 
haibozhangdocker/kube-scheduler:v1.24.2 
haibozhangdocker/kube-proxy:v1.24.2 
haibozhangdocker/kube-controller-manager:v1.24.2 
haibozhangdocker/etcd:3.5.3-0
haibozhangdocker/pause:3.7
haibozhangdocker/coredns:v1.8.6' 
for i in $images_list 
do 
    docker pull $i 
done 
docker save -o k8s-1-24-2.tar $images_list
修改文件为可执行:
# chmod 755 k8s_pull.sh && ll k8s_pull.sh
执行镜像拉取:
# sh k8s_pull.sh

g)主节点加载镜像:
haibozhangdocker/kube-apiserver:v1.24.2 
haibozhangdocker/kube-scheduler:v1.24.2 
haibozhangdocker/kube-proxy:v1.24.2 
haibozhangdocker/kube-controller-manager:v1.24.2 
haibozhangdocker/etcd:3.5.3-0
haibozhangdocker/pause:3.7
haibozhangdocker/coredns:v1.8.6
从节点加载镜像:
haibozhangdocker/kube-proxy:v1.24.2 
haibozhangdocker/pause:3.7

12.cri-dockerd安装
下载golang 1.18 版本
wget https://golang.google.cn/dl/go1.18.3.linux-amd64.tar.gz
解压golang至指定目录
tar -C /usr/local/ -zxvf ./go1.18.3.linux-amd64.tar.gz
创建gopath目录
mkdir /home/gopath
添加环境变量,编辑/etc/profile 文件,在文件末尾添加以下配置
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
加载/etc/profile文件
source /etc/profile
配置go proxy代理
go env -w GOPROXY="https://goproxy.io,direct"
验证golang是否安装完成,执行 go version命令
# go version

克隆cri-dockerd源码 
git clone https://github.com/Mirantis/cri-dockerd.git 
进入cri-dockerd目录
cd cri-dockerd/
创建bin目录并构建cri-dockerd二进制文件
mkdir bin
go build -o bin/cri-dockerd
创建/usr/local/bin,默认存在时,可不用创建
mkdir -p /usr/local/bin
安装cri-dockerd
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
复制服务管理文件至/etc/systemd/system目录中
cp -a packaging/systemd/* /etc/systemd/system
指定cri-dockerd运行位置
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
启动服务
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket

13.kubernetes集群初始化
--------------------------------------------------------------------------------------------------------------------------------------------------
下面这一步很重要,不操作很可能导致集群初始化失败,所有节点执行
vim /etc/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=haibozhangdocker/pause:3.7 --container-runtime-endpoint fd://
重启服务
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
--------------------------------------------------------------------------------------------------------------------------------------------------
初始化集群
kubeadm init --kubernetes-version=v1.24.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.126.132 --cri-socket unix:///var/run/cri-dockerd.sock --image-repository=haibozhangdocker
初始化失败,报错:centos7安装k8s 1.24.3版本 Error getting node“ err=“node \“master01\“ not found
解决方案:https://www.pudn.com/news/62f53b0af97302478e35d3eb.html
清理上次执行产生的数据,与以往不同的是需要指定一下cri-socket
# kubeadm reset --cri-socket="unix:///run/cri-dockerd.sock" --v=5

vim /etc/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=haibozhangdocker/pause:3.7 --container-runtime-endpoint fd://
完成后重启cri-service服务
systemctl daemon-reload && systemctl restart cri-docker.service

重新执行:kubeadm init --kubernetes-version=v1.24.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.126.132 --cri-socket unix:///var/run/cri-dockerd.sock --image-repository=haibozhangdocker
==> 成功!!!!!!!!!!

a)集群应用客户端管理集群文件准备
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
ls /root/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

b)安装calico网络插件
修改calico.yml文件
- name: CALICO_IPV4POOL_CIDR
  value: "10.224.0.0/16"  ==> 修改IP网段
  
- name: CLUSTER_TYPE
  value: "k8s,bgp"
# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
- name: IP_AUTODETECTION_METHOD ==> 添加行
  value: "interface=ens.*"      ==> 添加行,ens为对应网卡前缀

应用资源清单文件
kubectl apply -f calico.yaml
监视calico-sysem命名空间中pod运行情况
watch kubectl get pods -n calico-system
已经全部运行
kubectl get pods -n calico-system

c)查看集群状态
查看集群健康状态
kubectl get cs
查看所有pod节点
kubectl get pods --all-namespaces
查看kube-system状态
kubectl get pods -n kube-system

d)从节点加入集群(千万不要忘了:--cri-socket unix:///var/run/cri-dockerd.sock )
kubeadm join 192.168.126.132:6443 --token vos1yr.f510e7m5zcqb1ozt --discovery-token-ca-cert-hash sha256:0c5bebf58acd214d3760eedd8c5007fabf2ad45b114eb4af8d5648f8166d921b --cri-socket unix:///var/run/cri-dockerd.sock 

推荐K8S学习地址:
Kubernetes学习篇1_集群环境搭建测试:https://xiaosi.blog.csdn.net/article/details/124759359
Kubernetes学习篇2_资源管理、操作资源命令练习(Nginx集群外部访问):https://blog.csdn.net/qq_24654501/article/details/124770237
kubeadm部署kubernetes 1.24版本集群:https://www.pudn.com/news/62b84194405aad31f7070cd6.html
kubeadm部署kubernetes 1.24版本集群:https://blog.csdn.net/u011415722/article/details/125472772

阿里云拉取k8s镜像:
kubeadm config images pull --image-repository="registry.aliyuncs.com/google_containers" --cri-socket="unix:///run/cri-dockerd.sock"  ==> 阿里镜像有点问题

14.访问kubernetes集群首页
14.1 本地访问集群首页
1)默认情况下不会部署 Dashboard,可以通过以下命令部署:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
2)使用 kubectl 命令行工具来启用 Dashboard 访问
$ kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' --port=80 &
3)访问首页
http://k8s-master01/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
14.2 远程访问集群首页
dashboard开源地址:https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/README.md#login-not-available
1)查询集群信息
kubectl cluster-info
2)修改dashboard type: ClusterIP => type: NodePort
# kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
3)查询dashboard对外暴露端口
# kubectl -n kubernetes-dashboard get service kubernetes-dashboard
==> 443:31443/TCP
对外访问地址
https://<master-ip>:<apiserver-port>/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy
master-ip可以通过kubectl cluster-info找到
https://k8s-master01:31443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值