Kubernetes集群部署

0.安装前准备 ================================================================================== [root@k8s-master ~]# uname -a Linux k8s-master 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" BOOTPROTO="static" NAME="ens33" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.1.83 NETMASK=255.255.255.0 BROADCAST=192.168.1.255 GATEWAY=192.168.1.1 DNS1=192.168.1.1 ------------------------------------------------------------- hostnamectl --static set-hostname k8s-master systemctl disable firewalld.service systemctl stop firewalld.service setenforce 0 ------------------------------------------------------------- echo '192.168.1.81 k8s-master 192.168.1.81 etcd 192.168.1.81 registry 192.168.1.82 k8s-node-1 192.168.1.83 k8s-node-2' >> /etc/hosts cat /etc/hosts

1.部署master ======================================================================================== #部署etcd yum install etcd -y [root@k8s-master ~]# cat /etc/etcd/etcd.conf |grep -P "ETCD_NAME|ETCD_LISTEN_CLIENT_URLS|ETCD_ADVERTISE_CLIENT_URLS" #ETCD_LISTEN_CLIENT_URLS="http://localhost:2379" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" #ETCD_NAME="default" ETCD_NAME="master" #ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379" ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379,http://etcd:4001" systemctl start etcd #启动etcd etcdctl set testdir/testkey0 0 #测试 etcdctl get testdir/testkey0 #验证上一条的测试结果 [root@k8s-master ~]# etcdctl -C http://etcd:4001 cluster-health member 8e9e05c52164694d is healthy: got healthy result from http://etcd:2379 cluster is healthy [root@k8s-master ~]# etcdctl -C http://etcd:2379 cluster-health member 8e9e05c52164694d is healthy: got healthy result from http://etcd:2379 cluster is healthy ------------------------------------------------------------------------------------- #安装docker yum install docker -y 配置Docker配置文件,使其允许从registry中拉取镜像。有3种方式 1.修改/etc/sysconfig/docker 2.修改/etc/docker/daemon.json 3.修改/lib/systemd/system/docker.service #此处采用了方式2;(使用方式1就是有问题?)*****此处与“Centos7部署Kubernetes集群”不同***** [root@k8s-master ~]# cat /etc/docker/daemon.json { "insecure-registries":["192.168.1.81:5000"] } #启动docker systemctl enable docker systemctl start docker systemctl daemon-reload systemctl restart docker ------------------------------------------------------------------------------------- #启动本地registry*****此处与“Centos7部署Kubernetes集群”不同***** docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry docker search pod-infrastructure docker pull docker.io/tianyebj/pod-infrastructure docker images docker tag docker.io/tianyebj/pod-infrastructure 192.168.1.81:5000/pod-infrastructure docker push 192.168.1.81:5000/pod-infrastructure #此处需要下载镜像pod-infrastructure,并上传到本地registry,后面有用 ------------------------------------------------------------------------------------- #安装kubernets yum install kubernetes -y #安装kubernetes [root@k8s-master ~]# cat /etc/kubernetes/apiserver |grep -P "KUBE_API_ADDRESS|KUBE_API_PORT|KUBE_ETCD_SERVERS|KUBE_ADMISSION_CONTROL" #KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1" KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" # KUBE_API_PORT="--port=8080" KUBE_API_PORT="--port=8080" #KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379" KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379" #KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" ###KUBE_ADMISSION_CONTROL未修改,会触发错误"kubernetes启动容器时,容器一直是ContainerCreating不能running" [root@k8s-master ~]# cat /etc/kubernetes/config |grep KUBE_MASTER #KUBE_MASTER="--master=http://127.0.0.1:8080" KUBE_MASTER="--master=http://k8s-master:8080" 启动服务并设置开机自启动 systemctl enable kube-apiserver.service systemctl start kube-apiserver.service systemctl enable kube-controller-manager.service systemctl start kube-controller-manager.service systemctl enable kube-scheduler.service systemctl start kube-scheduler.service

2.部署node ================================================================================================= #安装docker yum install docker -y 配置Docker配置文件,使其允许从registry中拉取镜像。有3种方式 1.修改/etc/sysconfig/docker 2.修改/etc/docker/daemon.json 3.修改/lib/systemd/system/docker.service #此处采用了方式2;(使用方式1就是有问题?) [root@k8s-master ~]# cat /etc/docker/daemon.json { "insecure-registries":["192.168.1.81:5000"] } #启动docker systemctl enable docker systemctl start docker systemctl daemon-reload systemctl restart docker ------------------------------------------------------------------------------------------------ #安装kubernets yum install kubernetes -y #安装kubernetes [root@k8s-node-2 ~]# cat /etc/kubernetes/config |grep KUBE_MASTER #KUBE_MASTER="--master=http://127.0.0.1:8080" KUBE_MASTER="--master=http://k8s-master:8080" [root@k8s-node-1 ~]# cat /etc/kubernetes/kubelet |grep -P "KUBELET_ADDRESS|KUBELET_HOSTNAME|KUBELET_API_SERVER|KUBELET_POD_INFRA_CONTAINER" #KUBELET_ADDRESS="--address=127.0.0.1" KUBELET_ADDRESS="--address=0.0.0.0" #KUBELET_HOSTNAME="--hostname-override=127.0.0.1" KUBELET_HOSTNAME="--hostname-override=k8s-node-1" #KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080" KUBELET_API_SERVER="--api-servers=http://k8s-master:8080" #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.1.81:5000/pod-infrastructure:latest" #*****此处与“Centos7部署Kubernetes集群”不同***** #看起来k8s依赖这个pod-infrastructure镜像,默认是到红帽的连接进行下载,此处利用本地仓库进行替换 启动服务并设置开机自启动 systemctl enable kubelet.service systemctl start kubelet.service systemctl enable kube-proxy.service systemctl start kube-proxy.service ------------------------------------------------------------------------------------------------ ###master、node安装完毕后,就可以查看集群节点以及状态了 [root@k8s-master ~]# kubectl -s http://k8s-master:8080 get node NAME STATUS AGE k8s-node-1 Ready 36s k8s-node-2 Ready 21s [root@k8s-master ~]# kubectl get nodes NAME STATUS AGE k8s-node-1 Ready 1m k8s-node-2 Ready 52s

3.创建Flannel网络 master、node都需要进行安装 yum install flannel -y [root@k8s-master ~]# cat /etc/sysconfig/flanneld |grep FLANNEL_ETCD_ENDPOINTS #FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379" FLANNEL_ETCD_ENDPOINTS="http://etcd:2379" etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }' #master执行;Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性 ---------------------------------------------------------- 在master执行: systemctl enable flanneld.service systemctl start flanneld.service systemctl restart docker systemctl restart kube-apiserver.service systemctl restart kube-controller-manager.service systemctl restart kube-scheduler.service 在node上执行: systemctl enable flanneld.service systemctl start flanneld.service systemctl restart docker systemctl restart kubelet.service systemctl restart kube-proxy.service

4.kubernetes启动容器,验证安装结果是否正常 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 kubectl get deployment kubectl describe deployment kubectl describe rs kubectl get pod -o wide kubectl describe pod nginx-deployment-3954615459-xw6xn ---------------------------------------------------------------------------------------------------- [root@k8s-master ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 2 2 2 2 12m [root@k8s-master ~]# kubectl describe deployment Name: nginx-deployment Namespace: default CreationTimestamp: Sat, 15 Jan 2022 19:59:40 +0800 Labels: run=nginx-deployment Selector: run=nginx-deployment Replicas: 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-3954615459 (2/2 replicas created) Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 12m 12m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3954615459 to 2 [root@k8s-master ~]# kubectl describe rs Name: nginx-deployment-3954615459 Namespace: default Image(s): nginx:1.7.9 Selector: pod-template-hash=3954615459,run=nginx-deployment Labels: pod-template-hash=3954615459 run=nginx-deployment Replicas: 2 current / 2 desired Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed No volumes. Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 12m 12m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: nginx-deployment-3954615459-xw6xn 12m 12m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: nginx-deployment-3954615459-45d55 [root@k8s-master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-deployment-3954615459-45d55 1/1 Running 0 12m 10.0.35.2 k8s-node-2 nginx-deployment-3954615459-xw6xn 1/1 Running 0 12m 10.0.46.2 k8s-node-1 [root@k8s-master ~]# kubectl describe pod nginx-deployment-3954615459-xw6xn Name: nginx-deployment-3954615459-xw6xn Namespace: default Node: k8s-node-1/192.168.1.82 Start Time: Sat, 15 Jan 2022 19:59:39 +0800 Labels: pod-template-hash=3954615459 run=nginx-deployment Status: Running IP: 10.0.46.2 Controllers: ReplicaSet/nginx-deployment-3954615459 Containers: nginx-deployment: Container ID: docker://6f6296a6c53083366ead2accf9dc2e50804a8b9aa412c903bfc1195c1881cb46 Image: nginx:1.7.9 Image ID: docker-pullable://docker.io/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451 Port: State: Running Started: Sat, 15 Jan 2022 20:00:11 +0800 Ready: True Restart Count: 0 Volume Mounts: <none> Environment Variables: <none> Conditions: Type Status Initialized True Ready True PodScheduled True No volumes. QoS Class: BestEffort Tolerations: <none> Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 12m 12m 1 {default-scheduler } Normal Scheduled Successfully assigned nginx-deployment-3954615459-xw6xn to k8s-node-1 12m 12m 1 {kubelet k8s-node-1} spec.containers{nginx-deployment} Normal Pulling pulling image "nginx:1.7.9" 12m 12m 2 {kubelet k8s-node-1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy. 12m 12m 1 {kubelet k8s-node-1} spec.containers{nginx-deployment} Normal Pulled Successfully pulled image "nginx:1.7.9" 12m 12m 1 {kubelet k8s-node-1} spec.containers{nginx-deployment} Normal Created Created container with docker id 6f6296a6c530; Security:[seccomp=unconfined] 12m 12m 1 {kubelet k8s-node-1} spec.containers{nginx-deployment} Normal Started Started container with docker id 6f6296a6c530
参考链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!