零、目录
一、说明
本文将部署Kubernetes组件kubelet和kube-proxy
二、前提
- docker 已安装且 Cgroup driver 为 systemd,反正就是 docker 和 kubelet 的 Cgroup Driver 需要一致。
- Kubernetes创建pod时需要一个pause的镜像,而该镜像tag默认为
k8s.gcr.io/pause:3.2
,这个镜像源k8s.gcr.io
是 google 的,国内默认都是不能访问的,所以有以下三种方式处理这个镜像拉取失败问题:
- (推荐)docker配置国内镜像源(如阿里的
https://registry.cn-hangzhou.aliyuncs.com
),在阿里的镜像源中,pause在google_containers
仓库中,所以需要修改下方 kubelet 的启动参数,添加 --pod-infra-container-image=google_containers/pause:3.2
- 不修改docker镜像源的情况下,可修改下方 kubelet 的启动参数,添加
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
- 从docker官方仓库拉取
rancher/pause:3.2
镜像,并使用docker tag
修改tag为k8s.gcr.io/pause:3.2
,不过这个方法每加一个节点就要执行一次,不建议使用。
三、复制二进制文件到/usr/bin目录
1 2 3
| cp /usr/local/src/kubernetes/server/bin/kubelet /usr/bin cp /usr/local/src/kubernetes/server/bin/kube-proxy /usr/bin
|
四、创建kubelet服务
创建kubelet配置文件
配置文件 kubelet.conf 参数说明:
- –kubeconfig:设置与 API Server 连接的相关配置,可以与 kube-controller-manager 使用的 kubeconfig 文件相同。需要将相关客户端证书文件从 Master 主机复制到 Node 主机的
/etc/kubernetes/pki
目录下,例如 ca.crt
、client.key
、client.crt
文件
- –config:kubelet 配置文件,从 Kubernetes 1.10 版本开始引入,设置可以让多个 Node 共享的配置参数,例如
address
、port
、cgroupDriver
、clusterDNS
、clusterDomain
等
- –hostname-override:设置本 Node 在集群中的名称,默认值为主机名,应将各 Node 设置为主机IP或域名
- –network-plugin:网络插件类型,建议使用 CNI 网络插件
配置文件 kubelet.config 参数说明:
- address:服务监听 IP 地址
- port:服务监听端口号,默认值为 10250
- cgroupDriver:设置为 cgroupDriver 驱动,默认值为 cgroupfs,可选项包括 systemd
- clusterDNS:集群 DNS 服务的 IP 地址,例如 169.169.0.100
- clusterDomain:服务 DNS 域名后缀,例如 cluster.local
- authentication:设置是否允许匿名访问或者是否使用 webhook 进行鉴权
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| cat << EOF > /etc/kubernetes/kubelet.conf KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --config=/etc/kubernetes/kubelet.config \ --hostname-override=192.168.56.105 \ --network-plugin=cni \ --log-dir=/var/log/kubernetes --logtostderr=false --v=0" EOF
cat << EOF > /etc/kubernetes/kubelet.conf KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --config=/etc/kubernetes/kubelet.config \ --hostname-override=192.168.56.106 \ --network-plugin=cni \ --log-dir=/var/log/kubernetes --logtostderr=false --v=0" EOF
cat << EOF > /etc/kubernetes/kubelet.conf KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --config=/etc/kubernetes/kubelet.config \ --hostname-override=192.168.56.107 \ --network-plugin=cni \ --log-dir=/var/log/kubernetes --logtostderr=false --v=0" EOF
cat << EOF > /etc/kubernetes/kubelet.config kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 address: 0.0.0.0 port: 10250 cgroupDriver: systemd clusterDNS: ["169.169.0.100"] clusterDomain: cluster.local authentication: anonymous: enabled: true EOF
|
创建系统服务文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat << EOF > /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/kubernetes/kubernetes After=docker.target
[Service] EnvironmentFile=/etc/kubernetes/kubelet.conf ExecStart=/usr/bin/kubelet \$KUBELET_ARGS Restart=always
[Install] WantedBy=multi-user.target EOF
|
启动kubelet服务
1 2 3
| systemctl daemon-reload systemctl start kubelet systemctl enable kubelet
|
五、创建kube-proxy服务
创建kube-proxy配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| cat << EOF > /etc/kubernetes/kube-proxy.conf KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --hostname-override=192.168.56.105 \ --proxy-mode=iptables \ --logtostderr=false --log-dir=/var/log/kubernetes --v=0" EOF
cat << EOF > /etc/kubernetes/kube-proxy.conf KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --hostname-override=192.168.56.106 \ --proxy-mode=iptables \ --logtostderr=false --log-dir=/var/log/kubernetes --v=0" EOF
cat << EOF > /etc/kubernetes/kube-proxy.conf KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \ --hostname-override=192.168.56.107 \ --proxy-mode=iptables \ --logtostderr=false --log-dir=/var/log/kubernetes --v=0" EOF
|
创建系统服务文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat << EOF > /usr/lib/systemd/system/kube-proxy.service [Unit] Description=Kubernetes Kube-proxy Server Documentation=https://github.com/kubernetes/kubernetes After=network.target
[Service] EnvironmentFile=/etc/kubernetes/kube-proxy.conf ExecStart=/usr/bin/kube-proxy \$KUBE_PROXY_ARGS Restart=always
[Install] WantedBy=multi-user.target EOF
|
启动kube-proxy服务
1 2 3 4
| systemctl daemon-reload systemctl start kube-proxy systemctl enable kube-proxy
|
六、Kubernetes集群查看
复制kubelet二进制文件到/usr/bin目录
1
| cp /usr/local/src/kubernetes/server/bin/kubectl /usr/bin
|
查看集群节点
此时所有节点状态为 NotReady 是由于还没安装网络插件
1 2 3 4 5 6
| kubectl --kubeconfig=/etc/kubernetes/kubeconfig get nodes -owide
mkdir -p ~/.kube cp /etc/kubernetes/kubeconfig ~/.kube/config kubectl get nodes -owide
|
结果截图
(•̀ᴗ•́)و ̑̑