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
0.安装前准备
复制代码

 

复制代码
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
1.部署master
复制代码

 

复制代码
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
2.部署node
复制代码

 

复制代码
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
3.创建Flannel网络
复制代码

 

复制代码
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
4.kubernetes启动容器,验证安装结果是否正常
复制代码

 

 

参考链接:

  Centos7部署Kubernetes集群

posted @   雲淡風輕333  阅读(46)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示