使用kubeadm安装k8s并部署应用(k8s 安装部署)

使用kubeadm安装k8s并部署应用安装k8s
1. 准备机器
准备三台机器
192.168.136.104 master节点
192.168.136.105 worker节点
192.168.136.106 worker节点2.

安装k8s

1. 准备机器

准备3台机器

192.168.136.104 主节点

192.168.136.105工作节点

192.168.136.106工作节点

2. 安装前配置

1.基础环境

############################################## ## ## # ##################

#关闭防火墙:对于云服务器,必须设置安全组策略允许端口。

# https://kubernetes.io/zh/docs/setup/生产环境/工具/kubeadm/install-kubeadm/#check-required-ports

systemctl 停止防火墙

systemctl 禁用防火墙

# 更改主机名

hostnamectl 设置- 主机名k8s-01

# 显示变化

主机名ctl 状态

# 配置主机名解析

echo \’127.0.0.1 $(主机名)\’ /etc/hosts

#关闭selinux:

sed -i \’s/enforcing/disabled/\’ /etc/selinux/config

设置力0

#关闭交换:

交换-a

sed -ri \’s/.*swap.*/#/\’ /etc/fstab

#允许iptables 检查桥接流量

#https://kubernetes.io/en/docs/setup/生产环境/工具/kubeadm/install-kubeadm/#%E5%85%81%E8%AE%B8-iptables-%E6%A3%80%E6%9F% A5%E6%A1%A5%E6%8E%A5%E6%B5%81%E9%87%8F

## 启用br_netfilter

## 须藤modprobe br_netfilter

确认

## lsmod |

更改设置

#####在这里使用这个。不要在教室中使用此配置。 。

# 将桥接IPv4 流量传递到iptables 链。

# 更改/etc/sysctl.conf

# 如果设置则更改

sed -i \’s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g\’ /etc/sysctl.conf

sed -i \’s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g\’ /etc/sysctl.conf

# 可能不正确,补充一下

echo \’net.ipv4.ip_forward=1\’ /etc/sysctl.conf

echo \’net.bridge.bridge-nf-call-ip6tables=1\’ /etc/sysctl.conf

echo \’net.bridge.bridge-nf-call-iptables=1\’ /etc/sysctl.conf

echo \’net.ipv6.conf.all.disable_ipv6=1\’ /etc/sysctl.conf

echo \’net.ipv6.conf.default.disable_ipv6=1\’ /etc/sysctl.conf

echo \’net.ipv6.conf.lo.disable_ipv6=1\’ /etc/sysctl.conf

echo \’net.ipv6.conf.all.forwarding=1\’ /etc/sysctl.conf

# 执行命令应用

系统控制-p

############################################## ## ## ##########

2. docker环境

sudo yum 删除docker*

sudo yum install -y yum-utils

#配置docker yum源

sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 找到对应的Docker版本

yum list docker-ce –showduplicates sort -r

#安装docker 3:26.1.4-1.el7

yum install -y docker-ce-3:26.1.4-1.el7.x86_64 docker-ce-cli-3:26.1.4-1.el7.x86_64containerd.io

#服务启动

systemctl启动docker

启用systemctl docker

#配置加速自行申请配置

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json -\’EOF\’

{

‘注册表镜像’: [

\’https://############.mirror.swr.myhuaweicloud.com\’,

“https://############.mirror.aliyuncs.com”

]

}

结束后

sudo systemctl 守护进程重新加载

sudo systemctl 重新启动docker

3. 安装k8s核心 (都执行)

# 配置K8S yum源

cat EOF /etc/yum.repos.d/kubernetes.repo

[库伯内特]

名称=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

有效=1

gpg检查=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

结束后

# 卸载旧版本

yum 删除-y kubelet kubeadm kubectl

# 检查可安装版本

yum list kubelet –showduplicates sort -r

#安装指定版本的kubelet、kubeadm、kubectl

百胜安装-y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0

# 开机启动kubelet

启用systemctl kubelet 启动systemctl kubelet

# 此时看到kubelet 状态为Failed 是正常的,因为其他组件尚未完全安装。

[root@docker104 ~]#

kubelet.service – kubelet: Kubernetes 节点代理

Loaded: 已加载(/usr/lib/systemd/system/kubelet.service;已启用;供应商预设:已禁用)

Drop-In: /usr/lib/systemd/system/kubelet.service.d

10-kubeadm.conf

激活Active:(自动重启)(Result: 退出代码)2024-06-25 20:40:33 自9 秒前开始的PDT

文档: https://kubernetes.io/docs/

Process: 24068 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (代码=已退出,状态=1/FAILURE)

主PID: 24068(代码=已退出,状态=1/失败)

6 月25 日20:40:33 docker104 systemd[1]: kubelet.service: 主进程已退出,代码=已退出,状态=1/FAILURE

6 月25 日20:40:33 docker104 systemd[1]: 单元kubelet.service 已进入失败状态。

6 月25 日20:40:33 docker104 systemd[1]: kubelet.service 失败。

4. 初始化k8s master节点(master节点执行)

# 首先检查依赖的镜像

[root@docker104 ~] kubeadm 配置镜像列表

I0625 20:47:43.820940 24427 version.go:254]远程版本是相当新的: v1.30.2。 返回稳定版本1.21。

k8s.gcr.io/kube-apiserver:v1.21.14

k8s.gcr.io/kube-controller-manager:v1.21.14

k8s.gcr.io/kube-scheduler:v1.21.14

k8s.gcr.io/kube-proxy:v1.21.14

k8s.gcr.io/pause:3.4.1

k8s.gcr.io/etcd:3.4.13-0

k8s.gcr.io/coredns/coredns:v1.8.0

封装在#images.sh脚本文件中

#!/bin/bash

图片=(

kube-apiserver:v1.21.0

kube-proxy:v1.21.0

kube-控制器-管理器:v1.21.0

kube-scheduler:v1.21.0

coredns:v1.8.0

etcd:3.4.13-0

暂停:3.4.1

对于${images[@]} 中的imageName,

docker pullregistry.cn-hangzhou.aliyuncs.com/google_containers/$imageName

结尾

#脚本结束

请注意,##k8s coredns 镜像的1.21.0 版本比较特殊,与阿里云结合时需要特殊处理和重新标记。

docker标签registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

#运行脚本

chmod +x images.sh ./images.sh

########初始化kubeadm master######################

########kubeadm 加入其他工作人员########################

kubeadm 初始化\\

–apiserver-advertise-address=192.168.136.104 \\

–image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers \\

–kubernetes-版本v1.21.0 \\

–service-cidr=10.96.0.0/16 \\

–pod-network-cidr=192.178.0.0/16

## 注意:pod-cidr 和service-cidr

# cidr 无类域间路由(CIDR)

# 指定网络可达范围。 Pod子网范围+服务负载均衡网络子网范围+本地IP子网范围不能包含重叠的域。

# –apiserver-advertise-address apiserver 广播地址。主控机的地址IP。

# –image-repository 镜像仓库前缀

# –pod-network-cidr pod 网络范围

# –service-cidr 负载均衡网络范围

# 两个网络范围和一个本地IP范围不能包含重叠的域

############初始化后需要执行的语句##############

Kubernetes 控制平面已成功初始化。

#复制相关文件夹

要开始使用集群,您需要以普通用户: 身份运行以下命令:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

或者,如果您是root 用户,则可以运行:

# 声明环境变量

导出KUBECONFIG=/etc/kubernetes/admin.conf

# 部署pod网络并安装指定网络插件

现在您需要将Pod 网络部署到集群。

使用: 中列出的选项之一运行“kubectl apply -f [podnetwork].yaml”。

https://kubernetes.io/docs/concepts/cluster-administration/addons/

是:我们建议安装calico####################。

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

### 下载calico 映像可能会失败。请直接访问官方网站并下载所需的版本号。

wget https://docs.projectcalico.org/manifests/calico.yaml

# 检查版本号

[root@docker104 k8s]# cat calico.yaml |grep \’image:\’

image: docker.io/calico/cni:v3.25.0

image: docker.io/calico/cni:v3.25.0

image: docker.io/calico/node:v3.25.0

image: docker.io/calico/node:v3.25.0

image: docker.io/calico/kube-controllers:v3.25.0

# 替换版本号

[root@docker104 k8s]# sed -i \’s#docker.io/##g\’ calico.yaml

# 再看一遍

[root@docker104 k8s]# cat calico.yaml |grep \’image:\’

image: 印花布/cni:v3.25.0

image: 印花布/cni:v3.25.0

image: Calico/node:v3.25.0

image: Calico/node:v3.25.0

image: calico/kube-controllers:v3.25.0

# 从官网地址下载并解压

https://github.com/projectcalico/calico/releases?page=2

tar -vzxf 发行版-v3.25.0.tgz

[root@docker104release-v3.25.0]# ls

bin 映像清单

# 进入images目录,导入你需要的内容

dockerload -i calico-kube-controllers.tar

dockerload -i calico-cni.tar

dockerload -i calico-node.tar

# 重新运行命令

kubectl apply -f calico.yaml

### 命令检查

kubectl get pod -A ##获取集群中部署的所有应用程序pod

[root@docker104 image]# kubectl get pod -A

命名空间名称的就绪状态恢复AGE

kube-system calico-kube-controllers-77959b97b9-pgl2g 1/1 运行0 25 米

kube-system calico-node-h6bsk 1/1 运行0 25m

kube-system coredns-57d4cbf879-s726m 1/1 运行0 17h

kube-system coredns-57d4cbf879-trdbs 1/1 运行0 17h

kube-system etcd-docker104 1/1 运行0 17h

kube-system kube-apiserver-docker104 1/1 运行0 17h

kube-system kube-controller-manager-docker104 1/1 运行0 17h

kube-system kube-proxy-q9g8p 1/1 运行0 17h

kube-system kube-scheduler-docker104 1/1 运行0 17h

kubectl get names ##显示集群中所有机器的状态

5. 初始化woker节点

然后,您可以通过以root: 在每个工作节点上运行以下命令来加入任意数量的工作节点:

# 其他节点加入k8s集群,执行以下命令:该命令在kubeadmin init 之后指定。

kubeadm 加入192.168.136.104:6443 –token tbjrly.cbmgi5g7nb366f1m \\

–discovery-token-ca-cert-hash sha256:a5f53bc7d06d595ae0e34fd92028e03bdbec8aa62b1041c9765f2739f59877fe

# 全部执行完毕后,在k8s主节点上运行

kubectl get names ##显示集群中所有机器的状态

[root@docker104 k8s]# 获取kubectl节点

姓名状态角色年龄版本

docker104就绪控制平面,master 17h v1.21.0

docker105 未就绪无92s v1.21.0

docker106 未就绪无74s v1.21.0

# 工作节点尚未准备好。该节点上可能未安装网络插件。按照与主节点相同的方式导入网络插件calico镜像并自动安装。

# 查看日志尾部-100f /var/log 了解详细信息。

/messages
## 日志起始
Jun 26 18:21:08 docker105 kubelet: E0626 18:21:08.870465 91095 pod_workers.go:190] \”Error syncing pod, skipping\” err=\”failed to \\\”StartContainer\\\” for \\\”upgrade-ipam\\\” with ImagePullBackOff: \\\”Back-off pulling image \\\\\\\”calico/cni:v3.25.0\\\\\\\”\\\”\” pod=\”kube-system/calico-node-2zq8d\” podUID=78164c8e-8ba0-477e-90d1-76be4fd6965f
Jun 26 18:21:13 docker105 kubelet: I0626 18:21:13.264027 91095 cni.go:239] \”Unable to update cni config\” err=\”no networks found in /etc/cni/net.d\”
Jun 26 18:21:13 docker105 kubelet: E0626 18:21:13.281034 91095 kubelet.go:2218] \”Container runtime network not ready\” networkReady=\”NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized\”
## 日志结束
# 如上 cni config uninitialized就是未装网络插件的原因
docker load -i calico-cni.tar
docker load -i calico-node.tar
# 过会在master节点看到状态都是ready了
[root@docker104 k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker104 Ready control-plane,master 18h v1.21.0
docker105 Ready <none> 75m v1.21.0
docker106 Ready <none> 75m v1.21.0
[root@docker104 k8s]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-77959b97b9-pgl2g 1/1 Running 0 113m
kube-system calico-node-2zq8d 1/1 Running 0 80m
kube-system calico-node-b94mp 1/1 Running 0 80m
kube-system calico-node-h6bsk 1/1 Running 0 113m
kube-system coredns-57d4cbf879-s726m 1/1 Running 0 18h
kube-system coredns-57d4cbf879-trdbs 1/1 Running 0 18h
kube-system etcd-docker104 1/1 Running 0 18h
kube-system kube-apiserver-docker104 1/1 Running 0 18h
kube-system kube-controller-manager-docker104 1/1 Running 0 18h
kube-system kube-proxy-2djt9 1/1 Running 0 80m
kube-system kube-proxy-j5jkv 1/1 Running 0 80m
kube-system kube-proxy-q9g8p 1/1 Running 0 18h
kube-system kube-scheduler-docker104 1/1 Running 0 18h

7、设置ipvs模式

k8s整个集群为了访问通;默认是用iptables,性能下(kube-proxy在集群之间同步iptables的内容)

#1、查看默认kube-proxy 使用的模式
kubectl logs -n kube-system kube-proxy-28xv4
#2、需要修改 kube-proxy 的配置文件,修改mode 为ipvs。默认iptables,但是集群大了以后就很慢
kubectl edit cm kube-proxy -n kube-system
修改如下
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: \”\”
strictARP: false
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: \”ipvs\”
###修改了kube-proxy的配置,为了让重新生效,需要杀掉以前的Kube-proxy
kubectl get pod -A|grep kube-proxy
kubectl delete pod kube-proxy-pqgnt -n kube-system
### 修改完成后可以重启kube-proxy以生效

8、部署应用

# 测试部署一个Nginx应用
[root@docker104 k8s]# kubectl create deploy my-nginx –image=nginx
deployment.apps/my-nginx created
# 查看部署应用的ip
[root@docker104 k8s]# kubectl get pod -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default my-nginx-6b74b79f57-mg76v 1/1 Running 0 66s 192.178.70.193 docker105 <none> <none>
# 访问测试nginx
[root@docker104 k8s]# curl 192.178.70.193
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href=\”http://nginx.org/\”>nginx.org</a>.<br/>
Commercial support is available at
<a href=\”http://nginx.com/\”>nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#以上关于使用kubeadm安装k8s并部署应用的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92529.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月27日 下午1:22
下一篇 2024年6月27日 下午1:40

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注