Kubernetes 环境搭建与 proxy设置

从18年开始,计划投入大力气学习Kubernetes,毕竟还是想走云计算这条路,当技术变革来临之时,与其被拍在沙滩上还不如伸开双手去拥抱。

既然下定决心去学习Kubernetes,那就得脚踏实地的去做点事情,搭建一个实验的Kubernetes 集群算作是第一步吧。

为什么要设置代理

接触到第一个部署Kubernetes的工具是kubeadm,用Kubernetes 搭建一个集群官网[1]有比较详细的描述,步骤也比较简单,这里不打算重复kubeadm的几个命令,而是着重吐槽一下有关代理设置这一问题,在我们伟大的祖国,想做点事,代理就越发凸显出它的重要性,谁让这些开源技术都是人家美帝弄出来的?言归正传,搭建Kubernetes 必须要用到proxy,这是因为很多docker的image都是由Google在维护,即便不是,为了image的下载速度还可以接受,我们也得有个梯子。

设置终端代理

在执行kubeadm init去初始化master节点之前,用下面的命令去设置终端代理:

export http_proxy=http://$username:$password@$proxy_host:$port
export https_proxy=https://$username:$password@$proxy_host:$port
export no_proxy=127.0.0.1,localhost,192.168.2.100

192.168.2.100是master节点的物理IP。

设置docker的代理

初始化的过程中是要通过docker去下载image,没有代理去下载?你就去等吧,等吧,终于等到timeout。

可以去docker的官网去看如何为docker设置代理,这里记录我在实验环境里的设置,或许还需要用相同的方式创建一个https的proxy文件。

$ mkdir -p /etc/systemd/system/docker.service.d 
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]     
Environment="HTTP_PROXY=http://$username:$password@$proxy_host:$port" "NO_PROXY=localhost,127.0.0.1,192.168.2.100"

初始化master节点

既然代理都已经设置好了(其实这里有一个坑,很大的一个坑 ^^),来点真格的吧。

# kubeadm init --apiserver-advertise-address 192.168.2.100 --pod-network-cidr=10.244.0.0/16

给出来的是下面一堆输出:

[init] Using Kubernetes version: v1.9.3
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks.
[WARNING FileExisting-crictl]: crictl not found in system path
[WARNING HTTPProxyCIDR]: connection to “10.96.0.0/12” uses proxy “http://$username:$password@$proxy_host:$port”. This may lead to malfunctional cluster setup. Make sure that Pod and Services IP ranges specified correctly as exceptions in proxy configuration

You 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/

You can now join any number of machines by running the following on each node
as root:
kubeadm join –token 5076b0.10c90eec17e4a2a3 192.168.2.100:6443 –discovery-token-ca-cert-hash sha256:b7cdd4209d7357a020d29ca92f9b99ce1b671cd2fe841ca24ff7114e50f8778f

嗯,虽然有两个warning,但还是命令执行成功了。十年来的IT“从业经验”告诉我,警告看的多了,你吓唬的了谁?你看不是最终还是成功了么?

接着添加其它两个node节点到K8S的cluster里,还是成功!

耍一把K8S的命令行工具,依然是成功!

$ kubectl get nodes
NAME        STATUS    ROLES     AGE       VERSION
k8s-node1   Ready     <none>    10d       v1.9.6
k8s-node2   Ready     <none>    8d        v1.9.3
k8smaster   Ready     master    10d       v1.9.3

直到有一天我要去查看pod的日志文件:

$ kubectl logs -f httpd-7448fc6b46-6pf7w
    Error from server: Get https://192.168.18.111:10250/containerLogs/default/httpd-7448fc6b46-6pf7w/httpd?follow=true: cannotconnect

然而访问master节点上的日志却正常,pod也运行正常,通过curl也可以正常访问。

尝试K8S的dashboard,虽然可以安装成功,但页面访问给出的也是一样的提示cannotconnect,百思不得其解啊,你到是为什么cannotconnect?!! sun of the beach !!

直觉告诉我,这又是一个proxy设置的问题,但无论如何也想不到错在哪里,终于有那么一天,当我老老实实的复盘时,我不得不再次审视那几个warning。

[preflight] Running pre-flight checks.
[WARNING FileExisting-crictl]: crictl not found in system path
[WARNING HTTPProxyCIDR]: connection to “10.96.0.0/12” uses proxy “http://$username:$password@$proxy_host:$port”. This may lead to malfunctional cluster setup. Make sure that Pod and Services IP ranges specified correctly as exceptions in proxy configuration

恍然大悟,no_proxy, 不光是这里的”10.96.0.0/12”(虽然到现在我也不知道这个网络是给谁用的,-_-||),给docker设置proxy时,各个slave节点的IP也得在no_proxy的设置范围内,回过头来看,我们的proxy设置应该想像下面这样,其中192.168.18.111,192.168.18.75是slave节点的物理IP地址。

#终端proxy
export no_proxy=127.0.0.1,localhost,192.168.2.100192.168.18.111,10.96.0.0/12,192.168.18.75,10.244.0.0/16
#docker 代理
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]     
Environment="HTTP_PROXY=http://\$username:\$password@\$proxy_host:$port" "NO_PROXY=localhost,127.0.0.1,192.168.2.100,192.168.18.111,192.168.18.75,10.244.0.0/16"

通过下面的命令,让配置的代理生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

确认更新后的代理设置:

systemctl show docker --property Environment

再去试试CURL,dashboard,kubectl logs一切如你所愿!


[1] https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以为你提供一些建议,首先,你需要在一台服务器上安装Kubernetes,可以使用Kubernetes官方提供的安装脚本。其次,可以使用Kubernetes的dashboard工具来搭建你自己的Kubernetes集群,以及可以在集群中部署应用。最后,你还可以使用Kubernetes的命令行工具来管理你的Kubernetes集群。 ### 回答2: 搭建Kubernetes是一个相对复杂的过程,需要一系列核心组件的安装和配置。以下是搭建Kubernetes的一般步骤: 1. 准备环境:确保拥有足够数量的虚拟机或物理机,并且这些机器之间可以互相通信。可以选择使用虚拟化技术,如Docker等。 2. 安装Docker:在每台机器上安装Docker,这是运行Kubernetes的容器运行时环境。 3. 安装etcd:etcd是一个分布式键值存储数据库,Kubernetes使用它来存储集群的状态信息。在每台机器上安装etcd,并且配置它们之间的通信。 4. 安装kube-apiserver:kube-apiserver是Kubernetes的控制平面组件之一,它提供了API接口供其他组件进行通信。在一台机器上安装kube-apiserver并进行必要的配置。 5. 安装kube-controller-manager和kube-scheduler:这两个组件分别用于管理集群中的节点和调度容器。在一个或多个机器上安装并配置它们。 6. 安装kubelet和kube-proxy:kubelet是运行在每个节点上的Kubernetes代理程序,它负责管理节点上的容器。kube-proxy用于实现服务的负载均衡和代理转发。在每个节点上安装并配置它们。 7. 安装kubectlkubectlKubernetes的命令行工具,用于与集群进行交互和管理。在一台机器上安装kubectl,并配置连接到集群。 8. 运行集群:启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet和kube-proxy等组件,使它们开始运行并形成一个工作的Kubernetes集群。 9. 验证集群:使用kubectl命令验证集群的运行状态,例如通过获取节点、创建Pod等操作。 10. 安装网络插件:根据需要选择并安装网络插件,以便Pod之间可以进行通信和互相访问。 以上是一个简要的搭建Kubernetes的步骤,实际过程可能因具体环境和需求的不同而有所差异。在搭建过程中,建议参考Kubernetes官方文档和各种在线教程以获取详细的指导和帮助。 ### 回答3: 搭建Kubernetes需要以下步骤: 1. 配置主机环境:确保每个主机都能够连接到互联网,并保持更新和稳定的网络连接。同时,需要确保主机上的操作系统和软件包是最新的,以避免任何潜在的安全漏洞。 2. 安装Docker:Kubernetes使用Docker来容器化应用程序。因此,需要在每个主机上安装和配置Docker以支持Kubernetes。 3. 安装Kubernetes控制平面:控制平面负责管理和协调Kubernetes集群中的各个节点。可以通过多种方式安装控制平面,例如kubeadm、Minikube、kubespray等。 4. 配置网络:Kubernetes集群中的各个节点需要能够相互通信。可以使用网络插件(如Flannel、Calico、Weave等)来设置网络。 5. 添加工作节点:将其他主机加入Kubernetes集群作为工作节点。通过运行Kubernetes管理命令和配置文件,将其他主机设置为工作节点,以便它们可以运行和管理容器化的应用程序。 6. 部署应用程序:使用Kubernetes资源对象,如Pod、Deployment、Service等,部署和管理应用程序。通过定义资源对象的配置文件,将应用程序和相关资源提交到Kubernetes集群中进行部署。 7. 监控和调试:配置合适的监控工具,以便实时监视集群的运行状况和应用程序的性能。在部署过程中,及时检查日志以解决任何问题,并调试应用程序的行为。 8. 高可用性和扩展性:进行必要的配置和优化,以确保集群具有高可用性和可扩展性。可以通过设置节点复制、负载均衡和水平扩展等机制来实现高可用性和可扩展性。 总结起来,搭建Kubernetes需要配置主机环境、安装Docker和Kubernetes控制平面、配置网络、添加工作节点、部署应用程序,并进行监控、调试和优化。这些步骤将帮助您成功地搭建和管理Kubernetes集群。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值