kubelet是运行于集群中每个节点之上的Kubernetes代理程序,它的核心功能在于通过APIServer获取调度至自身运行的Pod资源的PodSpec并依之运行Pod对象。事实上,以自托管方式部署的Kubernetes集群,除了kubelet和Docker之外的所有组件均以Pod对象的形式运行
设定用于安装kubelet、kubeadm和kubectl等组件的yum仓库,编辑配置文件/etc/yum.repos.d/kubernetes.repo
kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg yum install kubelet kubeadm kubectl 配置kubeletKubernetes自1.8版本起强制要求关闭系统上的交换分区(Swap),否则kubelet将无法启动。当然,用户也可以通过将kubelet的启动参数“--fail-swap-on”设置为“false”忽略此限制,尤其是系统上运行有其他重要进程且系统内存资源稍嫌不足时建议保留交换分区。
编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其配置参数如下,以忽略禁止使用Swap的限制:
KUBELET_ EXTRA_ ARGS="--fail-swap-on=false"待配置文件修改完成后,需要设定kubelet服务开机自动启动,这也是kubeadm的强制要求:
systemctl enable kubelet.service以上部分的配置需要在集群所有机器配置,install kubelet kubeadm kubectl是安装集群的基本条件,这些服务的安装使用基于docker,环境的配置,例如防火墙等是保证初始化集群等的最基本条件
master节点初始化集群在Master节点上执行“kubeadminit”命令进行集群初始化。kubeadminit命令支持两种初始化方式,一是通过命令行选项传递关键的参数设定,另一个是基于yaml格式的专用配置文件设定更详细的配置参数
第一种方式:
kubeadm init --kubernetes-version=v1.13.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=0.0.0.0 --ignore-preflight-errors=Swap --kubernetes-version:正在使用的Kubernetes程序组件的版本号,需要与kubelet的版本号相同。 --pod-network-cidr:Pod网络的地址范围,其值为CIDR格式的网络地址;使用flannel网络插件时,其默认地址为10.244.0.0/16。 --service-cidr:Service的网络地址范围,其值为CIDR格式的网络地址,默认地址为10.96.0.0/12。 --apiserver-advertise-address:APIserver通告给其他组件的IP地址,一般应该为Master节点的IP地址,0.0.0.0表示节点上所有可用的地址。 --ignore-preflight-errors:忽略哪些运行时的错误信息,其值为Swap时,表示忽略因swap未关闭而导致的错误。第二种方式:
kubeadminit也配置文件加载配置,以定制更丰富的部署选项。以下是符合前述命令设定方式的使用示例,不过,它明确定义了kubeProxy的模式为ipvs,并支持通过修改imageRepository的值来修改获取系统镜像时使用的镜像仓库。
apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration kubernetesVersion: v1.13.1 api: advertiseAddress: 192.168.18.64 bindPort: 6443 controlPlaneEndpoint: "" imageRepository: k8s.gcr.io kubeProxy: config: mode: "ipvs" ipvs: ExcludeCIDRs: null minSyncPeriod: 0s scheduler: "" syncPeriod: 30s kubeletConfiguration: baseConfig: cgroupDriver: cgroupfs clusterDNS: -10.96.0.10 clusterDomain: cluster.local failSwapOn: false resolvConf: /etc/resolv.conf staticPodPath: /etc/kubernetes/manifests networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12将以上配置保存为kubedm-config.yaml
kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap成功后会生成node节点加入集群的命令
kubeadm join 192.168.18.64:6443 --token 4mvox7.5l6fgyyqo761yxyf --discovery-token-ca-cert-hash sha256:1cd687ae5837b85a48f9ca93873aa67b30d29b1584db3b1f2ede946506735035完成集群部署还需要执行三类操作:设定kubectl的配置文件、部署网络附件以及将各Node加入集群。下面就来讲解如何进行这三步操作。
设定kubectl的配置文件根据输出的命令执行就可以
至此为止,一个KubernetesMaster节点已经基本配置完成。接下来即可通过APIServer来验证其各组件的运行是否正常。kubectl有着众多子命令,其中“getcompontsstatuses”即能显示出集群组件当前的状态,也可使用其简写格式“get cs”:
[root@master ~]# kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"}