kubeadm部署kubernetes v1,kubeadm部署k8s集群 离线

kubeadm部署kubernetes v1https://kubernetes.io/docs/setup/cri/ 查看kubernetes当前版本兼容的docker版本: https://kubernetes.io/do

https://kubernetes.io/docs/setup/cri/

检查哪些版本的Docker 与您当前的kubernetes 版本兼容。

https://kubernetes.io/docs/setup/release/notes/

#安装依赖软件包

yum install -y yum-utils 设备映射器持久数据lvm2

# 添加Docker 存储库。这里使用的是国内阿里云yum源

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

#install docker-ce 直接在这里安装最新版本

百胜安装-y docker-ce

#更改docker配置文件

mkdir /etc/docker

猫/etc/docker/daemon.json EOF

{

\’exec-opts\’: [\’native.cgroupdriver=systemd\’],

\’logdriver\’: \’json 文件\’,

\’日志选项\’: {

\’最大尺寸\’: \’100m\’

},

\’存储驱动程序\’: \’覆盖2\’,

“存储选项”: [

\’overlay2.override\\_kernel\\_check=true\’

],

\’registry-mirrors\’: [\’https://uyah70su.mirror.aliyuncs.com\’]

}

结束后

# 注意,由于国内拉取镜像比较慢,所以在配置文件最后添加了registry镜像。

mkdir -p /etc/systemd/system/docker.service.d

# 重启docker服务

systemctl 守护进程重新加载systemctl 启用–now docker

安装kubeadm、kubelet、kubectl

官方文档:https://kubernetes.io/docs/setup/independent/install-kubeadm/

添加Kubernetes 源

由于国内无法获取官方源,这里我们使用阿里云的yum源来替代。

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

[库伯内特]

名称=Kubernetes

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

有效=1

gpg检查=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

结束后

或者使用华为云yum源

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

[库伯内特]

名称=Kubernetes

baseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64

有效=1

gpg检查=1

repo_gpgcheck=1

gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg

结束后

安装kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl –disableexcludes=kubernetes

# 或者安装指定版本

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

启动kubelet服务

启用systemctl –now kubelet

配置内核参数

cat EOF /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

结束后

sysctl–系统

2.部署master节点

官方参考:https://kubernetes.io/docs/setup/生产环境/tools/kubeadm/create-cluster-kubeadm/

在主节点上运行以下命令初始化主节点:

kubeadm 初始化\\

–apiserver-advertise-address=172.16.30.31 \\

–image-repository=registry.aliyuncs.com/google_containers \\

–pod-network-cidr=192.168.0.0/16

初始化命令说明:

apiserver-advertise-address(可选):kubeadm 使用默认网关所在的网络接口广播主节点的IP 地址。如果需要使用其他网络接口,请将–apiserver-advertise-address=参数设置为kubeadm init。 pod-network-cidr:选择pod网络插件,检查kubeadm初始化过程中是否需要传递参数。这取决于您选择的网络插件。您可能需要设置–Pod-network-cidr 来指定网络驱动程序。

CIDR。 Kubernetes 支持多种网络解决方案,每种解决方案都有不同的–pod-network-cidr 要求。

它有自己的要求,flannel 设置为10.244.0.0/16,calico 设置为192.168.0.0/16。 image-repository:Kubenetes的默认注册中心地址是k8s.gcr.io,在国内无法访问。 从版本1.13 开始的镜像-repository 参数。指定为可访问的镜像地址。这里我们使用registry.aliyuncs.com/google_containers。

kubeadm init 首先执行一系列预执行检查,以确保您的机器有资格运行Kubernetes。 如果发现错误,这些检查会引发警告并终止整个初始化过程。 kubeadm init 下载并安装集群控制平面组件。这可能会需要几分钟。输出应如下所示:

[root@k8smaster ~]# kubeadm init \\

–apiserver-advertise-address=172.16.30.31 \\

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

–pod-network-cidr=192.168.0.0/16

W1205 03:44:00.899847 4956 version.go:101] 无法从互联网获取Kubernetes 版本: 无法获取URL \’https://dl.k8s.io/release/stable-1.txt\’: https://dl.k8s.io/release/stable- 1 。 t xt: net/http: 请求在等待连接时被取消(Client.Timeout 在等待标头时超出)

W1205 03:44:00.899918 4956 version.go:102]回退到本地客户端版本: v1.16.3

[init] 使用Kubernetes 版本: v1.16.3

[预检] 执行预检检查

[警告系统验证]: 此Docker 版本不在已验证版本: 19.03.5 列表中。

[预检] 拉取设置Kubernetes 集群所需的镜像

[预检] 这可能需要1-2 分钟,具体取决于您的互联网连接速度

[预检] 您还可以使用“kubeadm config Images pull”提前执行此操作

将包含[kubelet-start] 标志的kubelet 环境文件写入文件“/var/lib/kubelet/kubeadm-flags.env”

[kubelet-start] 将kubelet 配置写入文件“/var/lib/kubelet/config.yaml”

[kubelet-start] 激活kubelet服务

[证书] 使用证书目录文件夹“/etc/kubernetes/pki”

[certs] 生成“ca”证书和密钥

[certs] 生成“apiserver”证书和密钥

[证书] apiserver 服务证书针对DNS 名称[k8smaster kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] 和IP [10.96.0.1 172.16.30.31] 进行签名。

[certs] 生成“apiserver-kubelet-client”证书和密钥

[certs] 生成“front-proxy-ca”证书和密钥

[certs] 生成“前端代理客户端”证书和密钥

[certs] 生成“etcd/ca”证书和密钥

[certs] 生成“etcd/server”证书和密钥

[证书] etcd/server 提供的证书针对DNS 名称[k8smaster localhost] 和IP [172.16.30.31 127.0.0.1 :1] 进行签名。

[certs] 生成“etcd/peer”证书和密钥

[证书] etcd/对等服务证书针对DNS 名称[k8smaster localhost] 和IP [172.16.30.31 127.0.0.1 :1] 进行签名。

[certs] 生成“etcd/healthcheck-client”证书和密钥

[certs] 生成“apiserver-etcd-client”证书和密钥

[certs] 生成“sa”密钥和公钥

[kubeconfig] 使用kubeconfig 文件夹“/etc/kubernetes”

[kubeconfig] 编写“admin.conf”kubeconfig 文件

[kubeconfig] 编写kubelet.conf kubeconfig 文件

[kubeconfig] 编写“controller-manager.conf”kubeconfig 文件

[kubeconfig] 写入“scheduler.conf”kubeconfig 文件

[控制平面] 使用清单文件夹“/etc/kubernetes/manifests”

[control-plane] 为“kube-apiserver”创建静态pod 清单

[控制平面] 为“kube-controller-manager”创建静态pod 清单

[控制平面] 为“kube-scheduler”创建静态pod 清单

[etcd] 在“/etc/kubernetes/manifests”中为本地etcd 创建静态pod 清单

[wait-control-plane] 等待kubelet 从目录“/etc/kubernetes/manifests”中将控制平面作为静态pod 启动。这可能最多需要4 分钟。

[apiclient] 所有控制平面组件在20.506862 秒后恢复正常

[upload-config] 将ConfigMap \’kubeadm-config\’ 使用的配置保存到\’kube-system\’ 命名空间

[kubelet] 使用集群中kubelet 的配置在命名空间kube-system 中创建ConfigMap \’kubelet-config-1.16\’

跳过[upload-certs] 阶段。请参阅–上传证书。

[mark-control-plane] 通过添加标签“node-role.kubernetes.io/master=”将节点k8smaster 标记为控制平面。

[mark-control-plane] 添加污点以将节点k8smaster 标记为控制平面[node-role.kubernetes.io/master:NoSchedule]

使用[引导令牌] token: 3ug4r5.lsneyn354n01mzbk

[bootstrap-token] 配置引导令牌、cluster-info ConfigMap 和RBAC 角色

[bootstrap-token] 配置RBAC 规则以允许节点引导令牌发布CSR,以便节点可以获得长期证书凭证

[bootstrap-token] 配置RBAC 规则以允许csrapprover 控制器自动批准来自节点引导令牌的CSR

[bootstrap-token] 配置RBAC 规则以允许集群中所有节点的客户端证书轮换

[bootstrap-token] 在“kube-public”命名空间中创建“cluster-info”ConfigMap

[插件] 应用所需的插件: CoreDNS

[插件] 必需插件: kube-proxy

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

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

mkdir -p $HOME/.kube

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

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

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

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

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

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

kubeadm 加入172.16.30.31:6443 –token 3ug4r5.lsneyn354n01mzbk \\

–discovery-token-ca-cert-hash sha256:1d6e7e49732eb504fbba2fdf171648af9651587b59c6416ea5488dc127ac2d64

(注意初始化结果中的kubeadm join命令,该命令是部署worker节点时使用的)

配置kubectl

kubectl 是一个用于管理Kubernetes 集群的命令行工具。初始化master 之后、使用kubectl 之前,请参阅下面的配置初始化结果中显示的命令。

mkdir -p $HOME/.kube

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

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

3.部署网络插件

参考:https://github.com/containernetworking/cni

您需要安装pod 网络插件,以便您的pod 可以相互通信。网络必须先于应用程序部署。在安装网络插件之前,CoreDNS 不会启动。

安装calico 网络插件。

官方文档参考:

https://kubernetes.io/docs/setup/生产环境/工具/kubeadm/create-cluster-kubeadm/#pod-network

https://docs.projectcalico.org/v3.10/getting-started/kubernetes/

为了让calico 正常工作,您必须将–pod-network-cidr=192.168.0.0/16 传递给kubeadm init 或更新calico.yml 文件以匹配您的pod 网络。

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

如果安装Flannel Network 插件,则必须通过kubeadm init 配置pod-network-cidr=10.244.0.0/16 参数。

检查网络插件

安装Pod 网络后,验证coredns 和所有其他Pod 是否正常运行,并验证主节点状态是否为Ready。

[root@k8smaster ~]# 获取kubectl节点

姓名状态角色年龄版本

k8smaster女士大师5m24s v1.16.3

[root@k8smaster ~]# kubectl -n kube-system 获取pod

姓名准备状态简历年龄

calico-kube-controllers-6b64bcd855-95pbb 1/1 运行0 106 秒

calico-node-l7988 1/1 运行0 106 秒

coredns-58cc8c89f4-rhqft 1/1 运行0 5 分10 秒

coredns-58cc8c89f4-tpbqc 1/1 运行0 5 分10 秒

etcd-k8smaster 1/1 运行0 4 分7 秒

kube-apiserver-k8smaster 1/1 运行0 4 分17 秒

kube-控制器-mana

ger-k8smaster 1/1 Running 0 4m25s
kube-proxy-744dr 1/1 Running 0 5m10s
kube-scheduler-k8smaster 1/1 Running 0 4m21s

至此,Kubernetes 的 Master 节点就部署完成了。如果只需要一个单节点的 Kubernetes,现在你就可以使用了。

4.部署worker节点

在 k8snode01 和 k8snode02 上分别执行初始化结果中的命令,将其注册到 Cluster 中:

#执行以下命令将节点加入集群
kubeadm join 172.16.30.31:6443 –token 3ug4r5.lsneyn354n01mzbk \\
–discovery-token-ca-cert-hash sha256:1d6e7e49732eb504fbba2fdf171648af9651587b59c6416ea5488dc127ac2d64
#如果执行kubeadm init时没有记录下加入集群的命令,可以通过以下命令重新创建
kubeadm token create –print-join-command

然后根据提示,通过 kubectl get nodes 查看节点的状态:

[root@k8smaster ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8smaster Ready master 40m v1.16.3 172.16.30.31 <none> CentOS Linux 7 (Core) 3.10.0-1062.4.1.el7.x86_64 docker://19.3.5
k8snode01 Ready <none> 29m v1.16.3 172.16.30.32 <none> CentOS Linux 7 (Core) 3.10.0-1062.4.1.el7.x86_64 docker://19.3.5
k8snode02 Ready <none> 29m v1.16.3 172.16.30.33 <none> CentOS Linux 7 (Core) 3.10.0-1062.4.1.el7.x86_64 docker://19.3.5

另外确认所有pod也处于running状态:

[root@k8smaster ~]# kubectl -n kube-system get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-6b64bcd855-95pbb 1/1 Running 0 37m 192.168.16.130 k8smaster <none> <none>
calico-node-l7988 1/1 Running 0 37m 172.16.30.31 k8smaster <none> <none>
calico-node-qqmzh 1/1 Running 0 30m 172.16.30.32 k8snode01 <none> <none>
calico-node-tjfh5 1/1 Running 0 30m 172.16.30.33 k8snode02 <none> <none>
coredns-58cc8c89f4-rhqft 1/1 Running 0 40m 192.168.16.131 k8smaster <none> <none>
coredns-58cc8c89f4-tpbqc 1/1 Running 0 40m 192.168.16.129 k8smaster <none> <none>
etcd-k8smaster 1/1 Running 0 39m 172.16.30.31 k8smaster <none> <none>
kube-apiserver-k8smaster 1/1 Running 0 39m 172.16.30.31 k8smaster <none> <none>
kube-controller-manager-k8smaster 1/1 Running 0 39m 172.16.30.31 k8smaster <none> <none>
kube-proxy-744dr 1/1 Running 0 40m 172.16.30.31 k8smaster <none> <none>
kube-proxy-85gcq 1/1 Running 0 30m 172.16.30.33 k8snode02 <none> <none>
kube-proxy-kvdjc 1/1 Running 0 30m 172.16.30.32 k8snode01 <none> <none>
kube-scheduler-k8smaster 1/1 Running 0 39m 172.16.30.31 k8smaster <none> <none>

5.kube-proxy开启ipvs

修改kube-proxy的configmap,在config.conf中找到mode参数,改为mode: \”ipvs\”然后保存:

kubectl -n kube-system get cm kube-proxy -o yaml | sed \’s/mode: \”\”/mode: \”ipvs\”/g\’ | kubectl replace -f –
#或者手动修改
kubectl -n kube-system edit cm kube-proxy
kubectl -n kube-system get cm kube-proxy -o yaml | grep mode
mode: \”ipvs\”
#重启kube-proxy pod
kubectl -n kube-system delete pods -l k8s-app=kube-proxy
#确认ipvs模式开启成功
[root@kmaster ~]# kubectl -n kube-system logs -f -l k8s-app=kube-proxy | grep ipvs
I1026 04:11:46.474911 1 server_others.go:176] Using ipvs Proxier.
I1026 04:11:42.842141 1 server_others.go:176] Using ipvs Proxier.
I1026 04:11:46.198116 1 server_others.go:176] Using ipvs Proxier.

日志中打印出Using ipvs Proxier,说明ipvs模式已经开启。

6.master节点调度pod

在默认情况下出于安全原因,集群不会在master节点上调度pod,但对于用于开发的单机Kubernetes环境希望在master节点运行用户pod,执行以下命令:

#master节点默认打了taints
[root@master ~]# kubectl describe nodes | grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
#执行以下命令去掉taints污点
[root@master ~]# kubectl taint nodes –all node-role.kubernetes.io/master-
node/master untainted
#再次查看 taint字段为none
[root@master ~]# kubectl describe nodes | grep Taints
Taints: <none>
#如果要恢复Master Only状态,执行如下命令:
kubectl taint node k8smaster node-role.kubernetes.io/master=:NoSchedule

7.运行应用测试集群

部署一个 Nginx Deployment,包含3个Pod副本
参考:
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment

cat > nginx.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:1.7.9
ports:
– containerPort: 80
EOF

执行yaml,并为该deployment创建nodeport类型的service

kubectl apply -f nginx.yaml
kubectl expose deployment nginx-deployment –type=NodePort –name=nginx-service

查看pod运行状态,并在集群外使用nodepod访问nginx 服务:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

建nodeport类型的service

kubectl apply -f nginx.yaml
kubectl expose deployment nginx-deployment –type=NodePort –name=nginx-service

查看pod运行状态,并在集群外使用nodepod访问nginx 服务:

[外链图片转存中…(img-fTKGVSnY-1719230711022)]
[外链图片转存中…(img-RBRRuElc-1719230711023)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

#以上关于kubeadm部署kubernetes v1的相关内容来源网络仅供参考,相关信息请以官方公告为准!

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

(0)
CSDN的头像CSDN
上一篇 2024年6月24日
下一篇 2024年6月24日

相关推荐

发表回复

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