千家信息网

kubernetes系列教程(二)kubeadm离线部署1.

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,写在前面本章是kubernetes系列教程第二=篇,主要介绍通过kubeadm安装工具部署kubernetes集群,考虑到国内网络限制,已将镜像下载到网盘,方便大家可离线部署。1. 环境概述1.1 安
千家信息网最后更新 2026年11月03日kubernetes系列教程(二)kubeadm离线部署1.

写在前面

本章是kubernetes系列教程第二=篇,主要介绍通过kubeadm安装工具部署kubernetes集群,考虑到国内网络限制,已将镜像下载到网盘,方便大家可离线部署。

1. 环境概述

1.1 安装概述

kubernetes常规的安装方式包含两种:二进制手动安装和kubeadm自动化安装,新版kubeadm目前已将kubernetes管理组件以pod的形式部署在集群中,社区目前推荐使用kubeadm的方式一件自动化部署,有兴趣的也可以通过二进制的方式一步一步部署kubernetes集群。不管用哪种方式,受限于GFW,大部分镜像需要***才能下载,大家自行补脑和解决,本文以离线的方式安装部署,将下载的镜像倒入到各个安装即可。

1.2 环境介绍

软件版本

软件名软件版本
OSCentOS Linux release 7.6.1810 (Core)
Dockerdocker-ce-18.03.1.ce-1.el7
Kubernetes1.14.1
Kubeadmkubeadm-1.14.1-0.x86_64
etcd3.3.10
flannelv0.11.0

环境说明,三台机器均为腾讯云上购买的CVM(Cloud Virtual Machine),机器配置是2vcpu+4G memory+50G disk

主机名角色IP地址软件
node-1master10.254.100.101docker,kubelet,etcd,kube-apiserver,kube-controller-manager,kube-scheduler
node-2worker10.254.100.102docker,kubelet,kube-proxy,flannel
node-3worker10.254.100.103docker,kubelet,kube-proxy,flannel

1.3 环境准备

1. 设置主机名,其他两个节点类似设置root@VM_100_101_centos ~# hostnamectl set-hostname node-1root@VM_100_101_centos ~# hostnamenode-1
2. 设置hosts文件,其他两个节点设置相同内容root@node-1 ~# vim /etc/hosts127.0.0.1 localhost localhost.localdomain 10.254.100.101 node-110.254.100.102 node-210.254.100.103 node-3
3.设置无密码登陆生成密钥对root@node-1 .ssh# ssh-keygen -P ''Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:zultDMEL8bZmpbUjQahVjthVAcEkN929w5EkUmPkOrU root@node-1The key's randomart image is:+---RSA 2048----+|      .=O=+=o.. ||     o+o..+.o+  ||    .oo=.   o. o ||    . . * oo .+  ||       oSOo.E  . ||       oO.o.     ||       o++ .     ||       . .o      ||        ...      |+----SHA256-----+
拷贝公钥到node-2和node-3节点root@node-1 .ssh# ssh-copy-id -i /root/.ssh/id_rsa.pub node-2:/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"The authenticity of host 'node-1 (10.254.100.101)' can't be established.ECDSA key fingerprint is SHA256:jLUH0exgyJdsy0frw9R+FiWy+0o54LgB6dgVdfc6SEE.ECDSA key fingerprint is MD5:f4:86:a8:0e:a6:03:fc:a6:04:df:91:d8:7a:a7:0d:9e.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@node-1's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'node-2'"and check to make sure that only the key(s) you wanted were added.
拷贝公钥到node-3节点root@node-1 .ssh# ssh-copy-id -i /root/.ssh/id_rsa.pub node-3:/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@node-3's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'node-3'"and check to make sure that only the key(s) you wanted were added.
4.测试无密码登陆root@node-1 ~# ssh node-2 hostnamenode-2root@node-1 ~# ssh node-3 hostnamenode-3
5. 关闭防火墙和SElinux[root@node-1 ~]# systemctl stop firewalld[root@node-1 ~]# systemctl disable firewalld[root@node-1 ~]# sed -i '/^SELINUX=/ s/enforcing/disabled/g' /etc/selinux/config [root@node-1 ~]# setenforce 0

1.4 安装Docker

1. 下载docker源[root@node-1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
2.安装docker-ce[root@node-1 ~]# yum install docker-ce-18.03.1.ce-1.el7.centos
3. 设置cgroup driver类型为systemd[root@node-1 ~]# cat > /etc/docker/daemon.json < {>  "exec-opts": ["native.cgroupdriver=systemd"],>  "log-driver": "json-file",>  "log-opts": {>  "max-size": "100m">  },>  "storage-driver": "overlay2",>  "storage-opts": [>  "overlay2.override_kernel_check=true">  ]> }> EOF
4. 启动docker服务并验证[root@node-1 ~]# systemctl restart docker[root@node-1 ~]# systemctl enable dockerCreated symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.[root@node-1 ~]# docker versionContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 8Server Version: 18.03.1-ceStorage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: trueLogging Driver: json-fileCgroup Driver: systemdPlugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88runc version: 4fc53a81fb7c994640722ac585fa9ca548971871init version: 949e6faSecurity Options: seccomp  Profile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 3.701GiBName: node-1ID: WCUZ:IJ3M:XGX4:S77A:3UG5:PTL4:MFJE:NNUT:IP4J:4PFU:OYMQ:X4LGDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries: 127.0.0.0/8Live Restore Enabled: false
5. 验证安装[root@node-1 ~]# docker infoClient: Debug Mode: falseServer: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.1 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd. #cgroup驱动类型 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-957.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 3.701GiB Name: node-1 ID: WCUZ:IJ3M:XGX4:S77A:3UG5:PTL4:MFJE:NNUT:IP4J:4PFU:OYMQ:X4LG Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: falseWARNING: bridge-nf-call-iptables is disabledWARNING: bridge-nf-call-ip6tables is disabled

2. 安装kubernetes集群

2.1 安装kubeadm等组件

1. 安装kubernetes源,国内可以使用阿里的kubernetes源,速度会快一点cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF2. 安装kubeadm,kubelet,kubectl[root@node-1 ~]# yum install kubeadm-1.14.1-0 kubectl-1.14.1-0 kubelet-1.14.1-0 --disableexcludes=kubernetes -y已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile正在解决依赖关系--> 正在检查事务---> 软件包 kubeadm.x86_64.0.1.14.1-0 将被 安装--> 正在处理依赖关系 kubernetes-cni >= 0.7.5,它被软件包 kubeadm-1.14.1-0.x86_64 需要--> 正在处理依赖关系 cri-tools >= 1.11.0,它被软件包 kubeadm-1.14.1-0.x86_64 需要---> 软件包 kubectl.x86_64.0.1.14.1-0 将被 安装---> 软件包 kubelet.x86_64.0.1.14.1-0 将被 安装--> 正在处理依赖关系 socat,它被软件包 kubelet-1.14.1-0.x86_64 需要--> 正在处理依赖关系 conntrack,它被软件包 kubelet-1.14.1-0.x86_64 需要--> 正在检查事务---> 软件包 conntrack-tools.x86_64.0.1.4.4-4.el7 将被 安装--> 正在处理依赖关系 libnetfilter_cttimeout.so.1(LIBNETFILTER_CTTIMEOUT_1.1)(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要--> 正在处理依赖关系 libnetfilter_cttimeout.so.1(LIBNETFILTER_CTTIMEOUT_1.0)(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要--> 正在处理依赖关系 libnetfilter_cthelper.so.0(LIBNETFILTER_CTHELPER_1.0)(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要--> 正在处理依赖关系 libnetfilter_queue.so.1()(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要--> 正在处理依赖关系 libnetfilter_cttimeout.so.1()(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要--> 正在处理依赖关系 libnetfilter_cthelper.so.0()(64bit),它被软件包 conntrack-tools-1.4.4-4.el7.x86_64 需要---> 软件包 cri-tools.x86_64.0.1.13.0-0 将被 安装---> 软件包 kubernetes-cni.x86_64.0.0.7.5-0 将被 安装---> 软件包 socat.x86_64.0.1.7.3.2-2.el7 将被 安装--> 正在检查事务---> 软件包 libnetfilter_cthelper.x86_64.0.1.0.0-9.el7 将被 安装---> 软件包 libnetfilter_cttimeout.x86_64.0.1.0.0-6.el7 将被 安装---> 软件包 libnetfilter_queue.x86_64.0.1.0.2-2.el7_2 将被 安装--> 解决依赖关系完成依赖关系解决========================================================================================================================================================== Package                                       架构                          版本                                 源                                 大小==========================================================================================================================================================正在安装: kubeadm                                       x86_64                        1.14.1-0                             kubernetes                        8.7 M kubectl                                       x86_64                        1.14.1-0                             kubernetes                        9.5 M kubelet                                       x86_64                        1.14.1-0                             kubernetes                         23 M为依赖而安装: conntrack-tools                               x86_64                        1.4.4-4.el7                          os                                186 k cri-tools                                     x86_64                        1.13.0-0                             kubernetes                        5.1 M kubernetes-cni                                x86_64                        0.7.5-0                              kubernetes                         10 M libnetfilter_cthelper                         x86_64                        1.0.0-9.el7                          os                                 18 k libnetfilter_cttimeout                        x86_64                        1.0.0-6.el7                          os                                 18 k libnetfilter_queue                            x86_64                        1.0.2-2.el7_2                        os                                 23 k socat                                         x86_64                        1.7.3.2-2.el7                        os                                290 k事务概要==========================================================================================================================================================需要安装几个重要依赖包:socat,cri-tools,cni等。3. 设置iptables网桥参数[root@node-1 ~]# cat <  /etc/sysctl.d/k8s.conf> net.bridge.bridge-nf-call-ip6tables = 1> net.bridge.bridge-nf-call-iptables = 1> EOF[root@node-1 ~]# sysctl --system,然后使用sysctl -a|grep 参数的方式验证是否生效4. 启动kubelet服务[root@node-1 ~]# systemctl restart kubelet[root@node-1 ~]# systemctl enable kubelet

2.2 倒入安装镜像

从网盘中(地址:https://pan.baidu.com/s/1hw8Q0Vf3xvhKoEiVtMi6SA)将kubernetes所需的镜像下载到本地并解压,进入到kubernetes/v.14.1目录下,执行如下操作步骤:
1.从云盘中下载镜像并上传到各个节点,进入到镜像所在节点,倒入到环境。[root@node-1 v1.14.1]# docker image load -i etcd:3.3.10.tar [root@node-1 v1.14.1]# docker image load -i pause:3.1.tar [root@node-1 v1.14.1]# docker image load -i coredns:1.3.1.tar [root@node-1 v1.14.1]# docker image load -i flannel:v0.11.0-amd64.tar [root@node-1 v1.14.1]# docker image load -i kube-apiserver:v1.14.1.tar [root@node-1 v1.14.1]# docker image load -i kube-controller-manager:v1.14.1.tar [root@node-1 v1.14.1]# docker image load -i kube-scheduler:v1.14.1.tar [root@node-1 v1.14.1]# docker image load -i kube-proxy:v1.14.1.tar 2. 检查镜像列表[root@node-1 v1.14.1]# docker image listREPOSITORY                           TAG                 IMAGE ID            CREATED             SIZEk8s.gcr.io/kube-proxy                v1.14.1             20a2d7035165        3 months ago        82.1MBk8s.gcr.io/kube-apiserver            v1.14.1             cfaa4ad74c37        3 months ago        210MBk8s.gcr.io/kube-scheduler            v1.14.1             8931473d5bdb        3 months ago        81.6MBk8s.gcr.io/kube-controller-manager   v1.14.1             efb3887b411d        3 months ago        158MBquay.io/coreos/flannel               v0.11.0-amd64       ff281650a721        6 months ago        52.6MBk8s.gcr.io/coredns                   1.3.1               eb516548c180        6 months ago        40.3MBk8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        8 months ago        258MBk8s.gcr.io/pause                     3.1                 da86e6ba6ca1        19 months ago       742kB

2.3 kubeadm初始化集群

1. kubeadm初始化集群,使用kubeadm初始化的时候需要使用--pod-network-cidr指定pod使用的网段,设置值根据不同的网络plugin选择,本文以flannel为例设置值为10.244.0.0/16(如果设置不一样,需要在后续初始化网络插件时候和对应插件的yaml文件保持一致),此外如果安装有多个不同的container runtime可以通过--cri-socket指定socket文件所属路径,如果有多个网卡可以通过--apiserver-advertise-address指定master地址,缺省会选择云主机默认网关所属的地址。

[root@node-1 ~]# kubeadm init --apiserver-advertise-address 10.254.100.101 --apiserver-bind-port 6443 --kubernetes-version 1.14.1 --pod-network-cidr 10.244.0.0/16[init] Using Kubernetes version: v1.14.1[preflight] Running pre-flight checks [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 18.03.1-ce. Latest validated version: 18.09[preflight] Pulling images required for setting up a Kubernetes cluster[preflight] This might take a minute or two, depending on the speed of your internet connection[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'#下载镜像[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"[kubelet-start] Activating the kubelet service[certs] Using certificateDir folder "/etc/kubernetes/pki"#生成CA等证书[certs] Generating "ca" certificate and key[certs] Generating "apiserver" certificate and key[certs] apiserver serving cert is signed for DNS names [node-1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.254.100.101][certs] Generating "apiserver-kubelet-client" certificate and key[certs] Generating "etcd/ca" certificate and key[certs] Generating "etcd/server" certificate and key[certs] etcd/server serving cert is signed for DNS names [node-1 localhost] and IPs [10.254.100.101 127.0.0.1 ::1][certs] Generating "apiserver-etcd-client" certificate and key[certs] Generating "etcd/peer" certificate and key[certs] etcd/peer serving cert is signed for DNS names [node-1 localhost] and IPs [10.254.100.101 127.0.0.1 ::1][certs] Generating "etcd/healthcheck-client" certificate and key[certs] Generating "front-proxy-ca" certificate and key[certs] Generating "front-proxy-client" certificate and key[certs] Generating "sa" key and public key[kubeconfig] Using kubeconfig folder "/etc/kubernetes"[kubeconfig] Writing "admin.conf" kubeconfig file[kubeconfig] Writing "kubelet.conf" kubeconfig file[kubeconfig] Writing "controller-manager.conf" kubeconfig file[kubeconfig] Writing "scheduler.conf" kubeconfig file[control-plane] Using manifest folder "/etc/kubernetes/manifests"#生成master节点静态pod配置文件[control-plane] Creating static Pod manifest for "kube-apiserver"[control-plane] Creating static Pod manifest for "kube-controller-manager"[control-plane] Creating static Pod manifest for "kube-scheduler"[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s[apiclient] All control plane components are healthy after 18.012370 seconds[upload-config] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace[kubelet] Creating a ConfigMap "kubelet-config-1.14" in namespace kube-system with the configuration for the kubelets in the cluster[upload-certs] Skipping phase. Please see --experimental-upload-certs[mark-control-plane] Marking the node node-1 as control-plane by adding the label "node-role.kubernetes.io/master=''"[mark-control-plane] Marking the node node-1 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule][bootstrap-token] Using token: r8n5f2.9mic7opmrwjakled[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles#配置RBAC授权[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster[bootstrap-token] creating the "cluster-info" ConfigMap in the "kube-public" namespace[addons] Applied essential addon: CoreDNS[addons] Applied essential addon: kube-proxyYour Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube #配置环境变量配置文件 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: #安装网络插件 https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 10.254.100.101:6443 --token r8n5f2.9mic7opmrwjakled \ #添加节点命令,优先记录下来 --discovery-token-ca-cert-hash sha256:16e383c8abff6233021331944080087f0514ddd15d96c65d19443b0af02d64ab 

通过kubeadm init --apiserver-advertise-address 10.254.100.101 --apiserver-bind-port 6443 --kubernetes-version 1.14.1 --pod-network-cidr 10.244.0.0/16安装命令,显示了kubeadm安装过程中的一些重要步骤:下载镜像,生成证书,生成配置文件,配置RBAC授权认证,配置环境变量,安装网络插件指引,添加node指引配置文件。

2.生成kubectl环境配置文件

[root@node-1 ~]# mkdir /root/.kube[root@node-1 ~]# cp -i /etc/kubernetes/admin.conf /root/.kube/config[root@node-1 ~]# kubectl get nodesNAME  STATUS  ROLES AGE  VERSIONnode-1  NotReady  master  6m29s  v1.14.1

3. 添加node节点,将另外两个节点加入到集群中,复制上述的添加节点命令到指定节点添加即可。

[root@node-3 ~]# kubeadm join 10.254.100.101:6443 --token r8n5f2.9mic7opmrwjakled \>     --discovery-token-ca-cert-hash sha256:16e383c8abff6233021331944080087f0514ddd15d96c65d19443b0af02d64ab [preflight] Running pre-flight checks    [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 18.03.1-ce. Latest validated version: 18.09[preflight] Reading configuration from the cluster...[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"[kubelet-start] Activating the kubelet service[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:* Certificate signing request was sent to apiserver and a response was received.* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.以此类推到node-2节点添加即可,添加完之后通过kubectl get nodes验证,此时由于还没有安装网络plugin,所有的node节点均显示NotReady状态:[root@node-1 ~]# kubectl get nodesNAME     STATUS     ROLES    AGE     VERSIONnode-1   NotReady   master   16m     v1.14.1node-2   NotReady      4m34s   v1.14.1node-3   NotReady      2m10s   v1.14.1
  1. 安装网络plugin,kubernetes支持多种类型网络插件,要求网络支持CNI插件即可,CNI是Container Network Interface,要求kubernetes的中pod网络访问方式:node和node之间网络互通,pod和pod之间网络互通,node和pod之间网络互通,不同的CNI plugin支持的特性有所差别。kubernetes支持多种开源的网络CNI插件,常见的有flannel,calico,canal,weave等。flannel是一种overlay的网络模型,通过vxlan隧道方式构建tunnel网络,实现k8s中网络的互联,后续在做介绍,如下是安装过程:
[root@node-1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.ymlpodsecuritypolicy.extensions/psp.flannel.unprivileged createdclusterrole.rbac.authorization.k8s.io/flannel createdclusterrolebinding.rbac.authorization.k8s.io/flannel createdserviceaccount/flannel createdconfigmap/kube-flannel-cfg createddaemonset.extensions/kube-flannel-ds-amd64 createddaemonset.extensions/kube-flannel-ds-arm64 createddaemonset.extensions/kube-flannel-ds-arm createddaemonset.extensions/kube-flannel-ds-ppc64le createddaemonset.extensions/kube-flannel-ds-s390x created

通过上述输出可知道,部署flannel 需要RBAC授权,配置configmap和daemonset,其中Daemonset能够适配各种类型的CPU架构,默认安装了多个,一般是adm64即可,可以将上述的url下载编辑,保留kube-flannel-ds-amd64这个daemonset即可,或者将其删除

1. 查看flannel安装的daemonsets[root@node-1 ~]# kubectl get daemonsets -n kube-system NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGEkube-flannel-ds-amd64     3         3         3       3            3           beta.kubernetes.io/arch=amd64     2m34skube-flannel-ds-arm       0         0         0       0            0           beta.kubernetes.io/arch=arm       2m34skube-flannel-ds-arm64     0         0         0       0            0           beta.kubernetes.io/arch=arm64     2m34skube-flannel-ds-ppc64le   0         0         0       0            0           beta.kubernetes.io/arch=ppc64le   2m34skube-flannel-ds-s390x     0         0         0       0            0           beta.kubernetes.io/arch=s390x     2m34skube-proxy                3         3         3       3            3                                       30m删除不需要的damonsets[root@node-1 ~]# kubectl delete daemonsets kube-flannel-ds-arm kube-flannel-ds-arm64 kube-flannel-ds-ppc64le kube-flannel-ds-s390x -n kube-systemdaemonset.extensions "kube-flannel-ds-arm" deleteddaemonset.extensions "kube-flannel-ds-arm64" deleteddaemonset.extensions "kube-flannel-ds-ppc64le" deleteddaemonset.extensions "kube-flannel-ds-s390x" deleted

此时再验证node的安装情况,所有节点均已显示为Ready状态,安装完毕!

[root@node-1 ~]# kubectl get nodesNAME     STATUS   ROLES    AGE   VERSIONnode-1   Ready    master   29m   v1.14.1node-2   Ready       17m   v1.14.1node-3   Ready       15m   v1.14.1

2.4 配置kubectl命令补全功能

使用kubectl和kubernetes交互时候可以使用缩写模式也可以使用完整模式,如kubectl get nodes和kubectl get no能实现一样的效果,为了提高工作效率,可以使用命令补全的方式加快工作效率。

[root@node-1 ~]# kubectl completion bash >/etc/kubernetes/kubectl.sh[root@node-1 ~]# echo "source /etc/kubernetes/kubectl.sh" >>/root/.bashrc [root@node-1 ~]# cat /root/.bashrc # .bashrc# User specific aliases and functionsalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'# Source global definitionsif [ -f /etc/bashrc ]; then    . /etc/bashrcfisource /etc/kubernetes/kubectl.使配置生效[root@node-1 ~]# source /etc/kubernetes/kubectl.sh 命令行中输入kubectl get co再按TAB键就能自动补全了[root@node-1 ~]# kubectl get cocomponentstatuses         configmaps                controllerrevisions.apps  [root@node-1 ~]# kubectl get componentstatuses 

3. 验证安装服务状态

  1. 验证node状态
获取node的列表,可以查看到状态, 角色,启动市场,版本,[root@node-1 ~]# kubectl get nodes NAME     STATUS   ROLES    AGE   VERSIONnode-1   Ready    master   46m   v1.14.1node-2   Ready       34m   v1.14.1node-3   Ready       32m   v1.14.1查看node的详细信息,可以查看到标签,地址,资源情况,资源分配情况,event日志信息等[root@node-1 ~]# kubectl describe node node-1Name:               node-1Roles:              masterLabels:             beta.kubernetes.io/arch=amd64                    beta.kubernetes.io/os=linux                    kubernetes.io/arch=amd64                    kubernetes.io/hostname=node-1                    kubernetes.io/os=linux                    node-role.kubernetes.io/master=Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"3a:32:d1:a2:ac:e2"}                    flannel.alpha.coreos.com/backend-type: vxlan                    flannel.alpha.coreos.com/kube-subnet-manager: true                    flannel.alpha.coreos.com/public-ip: 10.254.100.101                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock                    node.alpha.kubernetes.io/ttl: 0                    volumes.kubernetes.io/controller-managed-attach-detach: trueCreationTimestamp:  Sat, 10 Aug 2019 17:35:45 +0800Taints:             node-role.kubernetes.io/master:NoScheduleUnschedulable:      falseConditions:  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message  ----             ------  -----------------                 ------------------                ------                       -------  MemoryPressure   False   Sat, 10 Aug 2019 18:22:26 +0800   Sat, 10 Aug 2019 17:35:42 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available  DiskPressure     False   Sat, 10 Aug 2019 18:22:26 +0800   Sat, 10 Aug 2019 17:35:42 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure  PIDPressure      False   Sat, 10 Aug 2019 18:22:26 +0800   Sat, 10 Aug 2019 17:35:42 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available  Ready            True    Sat, 10 Aug 2019 18:22:26 +0800   Sat, 10 Aug 2019 18:04:26 +0800   KubeletReady                 kubelet is posting ready statusAddresses:  InternalIP:  10.254.100.101  Hostname:    node-1Capacity: cpu:                2 ephemeral-storage:  51473868Ki hugepages-2Mi:      0 memory:             3880524Ki pods:               110Allocatable: cpu:                2 ephemeral-storage:  47438316671 hugepages-2Mi:      0 memory:             3778124Ki pods:               110System Info: Machine ID:                 0ea734564f9a4e2881b866b82d679dfc System UUID:                DA7F90FC-7E95-4570-A0E9-317270B8EE3C Boot ID:                    84b9bebb-598b-48ab-b0c4-bbd19d8d566e Kernel Version:             3.10.0-957.el7.x86_64 OS Image:                   CentOS Linux 7 (Core) Operating System:           linux Architecture:               amd64 Container Runtime Version:  docker://18.3.1 Kubelet Version:            v1.14.1 Kube-Proxy Version:         v1.14.1PodCIDR:                     10.244.0.0/24Non-terminated Pods:         (5 in total)  Namespace                  Name                              CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE  ---------                  ----                              ------------  ----------  ---------------  -------------  ---  kube-system                etcd-node-1                       0 (0%)        0 (0%)      0 (0%)           0 (0%)         46m  kube-system                kube-apiserver-node-1             250m (12%)    0 (0%)      0 (0%)           0 (0%)         46m  kube-system                kube-controller-manager-node-1    200m (10%)    0 (0%)      0 (0%)           0 (0%)         46m  kube-system                kube-proxy-x5t6r                  0 (0%)        0 (0%)      0 (0%)           0 (0%)         47m  kube-system                kube-scheduler-node-1             100m (5%)     0 (0%)      0 (0%)           0 (0%)         46mAllocated resources:  (Total limits may be over 100 percent, i.e., overcommitted.)  Resource           Requests    Limits  --------           --------    ------  cpu                550m (27%)  0 (0%)  memory             0 (0%)      0 (0%)  ephemeral-storage  0 (0%)      0 (0%)Events:  Type    Reason                   Age                From                Message  ----    ------                   ----               ----                -------  Normal  Starting                 47m                kubelet, node-1     Starting kubelet.  Normal  NodeHasSufficientMemory  47m (x8 over 47m)  kubelet, node-1     Node node-1 status is now: NodeHasSufficientMemory  Normal  NodeHasNoDiskPressure    47m (x8 over 47m)  kubelet, node-1     Node node-1 status is now: NodeHasNoDiskPressure  Normal  NodeHasSufficientPID     47m (x7 over 47m)  kubelet, node-1     Node node-1 status is now: NodeHasSufficientPID  Normal  NodeAllocatableEnforced  47m                kubelet, node-1     Updated Node Allocatable limit across pods  Normal  Starting                 47m                kube-proxy, node-1  Starting kube-proxy.  Normal  NodeReady                18m                kubelet, node-1     Node node-1 status is now: NodeReady
  1. 查看组建状态,kubernetes中核心的组建,包括scheduler,controller-manager,etcd
[root@node-1 ~]# kubectl get componentstatuses NAME  STATUS MESSAGE  ERRORscheduler Healthy  ok  controller-manager  Healthy  ok  etcd-0  Healthy  {"health":"true"}  
  1. 查看pod的情况,master中的角色包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd,coredns以pods形式部署在集群中,worker节点的kube-proxy也以pod的形式部署。实际上pod是以其他控制器如daemonset的形式控制的。
查看当前系统中所有运行的pods状态。[root@node-1 ~]# kubectl get pods -n kube-system NAME  READY  STATUS RESTARTS  AGEcoredns-fb8b8dccf-hrqm8 1/1  Running  0 50mcoredns-fb8b8dccf-qwwks 1/1  Running  0 50metcd-node-1 1/1  Running  0 48mkube-apiserver-node-1 1/1  Running  0 49mkube-controller-manager-node-1  1/1  Running  0 49mkube-proxy-lfckv  1/1  Running  0 38mkube-proxy-x5t6r  1/1  Running  0 50mkube-proxy-x8zqh  1/1  Running  0 36mkube-scheduler-node-1 1/1  Running  0 49m查看daemonsets和deployments列表[root@node-1 ~]# kubectl get ds -n kube-system NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGEkube-flannel-ds-amd64   3         3         3       3            3           beta.kubernetes.io/arch=amd64   3m21skube-proxy              3         3         3       3            3                                     58m[root@node-1 ~]# kubectl get deployments -n kube-system NAME      READY   UP-TO-DATE   AVAILABLE   AGEcoredns   2/2     2            2       58m上述输出中可以看到flannel和kube-proxy是以Daemonsets的形式部署在集群中,coredns是以deployments的形式部署,但并未看到kube-apiserver等控制器,实际上master的组件是一种静态pod(static pod)的形式部署在集群中。

4. 参考文档

  1. Container Runtime安装文档https://kubernetes.io/docs/setup/production-environment/container-runtimes/

  2. kubeadm安装https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

  3. 初始化kubeadm集群https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

​


当你的才华撑不起你的野心时,你就应该静下心来学习

返回kubernetes系列教程目录

​

​喜欢我的文章就请关注+转发吧

软件 软件包 网络 节点 正在 配置 集群 镜像 处理 方式 插件 文件 环境 形式 状态 验证 命令 生成 地址 事务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 有格互联网科技 科技平台互联网 互联网科技保险 科技创新与互联网经济 齐家互联网科技 润盈互联网科技 汉立互联网科技有限公司联系电话 湖南洣水互联网科技有限公司扣款 北京华百购互联网科技有限公司 科技与互联网哪个更好 互联网科技革命什么开始 互联网数据科技专业 伊宁互联网科技做什么的 科技互联网的核心竞争力 元气玛特互联网科技公司是外包吗 21世纪互联网科技成就 2021世界互联网领先科技成果发布 中国新注册互联网科技 科技互联网专业务虚会材料 亿人帮互联网科技有限公司 上海互联网科技有限公司 联恩商钥互联网科技有限公司 互联网科技公司的市场部门 广西互联网科技孵化中心 抖集互联网科技技术咨询 福州德业互联网科技 中国新注册互联网科技 陕西彩京云互联网科技有限公司 互联网科技创新方面的资料
0