kubernetes系列之六:安装kubernets v1.10.0和ipvs mode kube-proxy

本文介绍如何在Kubernetes v1.10.0版本中启用IPVS模式的kube-proxy,包括安装CentOS、配置内核参数、安装kubernetes软件等准备工作,以及配置安装master和minion节点的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

kubeadm是Kubernetes官方推出的快速部署Kubernetes集群工具,kubeadm通过将Kubernetes相关服务容器化以简化部署过程。

在kubernetes 1.8以上的版本中,对于kube-proxy组件增加了除iptables模式和用户模式之外ipvs模式的支持。通过ipvs的NAT模式,对访问k8s service的请求进行虚IP到POD IP的转发。

本文在kubernetes v1.10.0的基础上enable IPVS模式的kube-proxy。

转载自https://blog.youkuaiyun.com/cloudvtech

二、准备工作

1.安装好CentOS操作系统

cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

2.预先设置必要配置

2.1 停止防火墙:systemctl stop firewalld; systemctl disable firewalld; setenforce 0

2.2 更改/etc/selinux/config: SELINUX=disabled

2.3 配置内核参数:/etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0

sysctl -p /etc/sysctl.d/k8s.conf

载入ipvs内核模块:

modprobe ip_vs 

modprobe ip_vs_rr 

2.4 配置kubernetes软件源

     cat <<EOF > /etc/yum.repos.d/kubernetes.repo
     [kubernetes]
     name=Kubernetes
     baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
     enabled=1
     gpgcheck=1
     repo_gpgcheck=1
     gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
     https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
     EOF

3.安装 kubernetes软件

yum install -y kubelet kubeadm kubectl


3.1 根据需要配置kubelet的启动参数

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
#Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
Environment="KUBELET_PROXY_ARGS=--proxy-mode=ipvs --ipvs-min-sync-period=5s --ipvs-sync-period=5s --ipvs-scheduler=rr"

ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS

3.2 编辑kubeadm的配置文件

4.关闭这个虚拟机,制作多个clone作为minion节点

转载自https://blog.youkuaiyun.com/cloudvtech


三、配置安装kubernetes master和minion节点

1.启动一个虚拟机作为master节点

2.编辑kubeadm配置文件 kubeadm.config

apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
api:
  advertiseAddress: 192.168.166.101
networking:
  podSubnet: 10.244.0.0/16
kubernetesVersion: "v1.10.0"
kubeProxy:
  config:
    mode: "ipvs"

3.使用kubeadm初始化master节点

kubeadm init   --config ./kubeadm.config [init] Using Kubernetes version: v1.10.0

......


4. 运行上述初始化返回要求运行的命令来配置kubectl

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.安装flannel CNI插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f  kube-flannel.yml

这将在每个node上运行flannel的daemonset

6.在各个节点上运行join命令

kubeadm join 192.168.166.101:6443 --token dtvlg9.798fbe57awyzjzfx --discovery-token-ca-cert-hash sha256:a3406c544acb65954339ab9d6b9801673cb646dd17fa162fbf8aa1cd239b2b99

7.查看安装结果



Note,要reset整个cluster可以在master和每个node上运行如下命令,然后在运行初始化步骤:

kubeadm reset

rm -rf /etc/kubernetes/pki/ca.crt
rm -rf /etc/kubernetes/kubelet.conf 
rm -rf /etc/kubernetes/manifests

要切换kube-proxy的模式,必须修改kubeadm.config,然后使用kubeadm reset和再init整个cluster

转载自https://blog.youkuaiyun.com/cloudvtech

四、安装nginx deployment

1.编辑deployment文件

nginx.yml 

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

2.部署

kubectl apply -f nginx.yml 

deployment.apps "nginx-deployment" created



3.暴露nginx service

kubectl expose deployment/nginx-deployment


4.查看ipvs,将数据NAT到后端


而cluster service的VIP会被绑定到每个node的kube-ipvs0虚拟网卡上

node1的NIC

5: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN 
    link/ether a2:e0:de:f0:46:e4 brd ff:ff:ff:ff:ff:ff
    inet 10.96.0.1/32 brd 10.96.0.1 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.96.0.10/32 brd 10.96.0.10 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.99.190.144/32 brd 10.99.190.144 scope global kube-ipvs0
       valid_lft forever preferred_lft forever

node2的NIC

5: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN 
    link/ether 9e:65:33:4f:c0:7a brd ff:ff:ff:ff:ff:ff
    inet 10.96.0.1/32 brd 10.96.0.1 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.96.0.10/32 brd 10.96.0.10 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.99.190.144/32 brd 10.99.190.144 scope global kube-ipvs0
       valid_lft forever preferred_lft forever

而且这些ipvs使用的NIC的状态是DOWN,只是作为绑定VIP使用

使用ipvs之后,iptables已经没有load balance的信息了


这里需要说明的是由于所有从主机经由IPVS调度进入POD的数据包都会经过MASQUERADE,所以数据包实际上经过了DNAT(by IPVS)和SNAT(by iptables MASQUERADE),数据包在POD返回的时候一定会返回到原来node所在的IPVS。所以经由flannel的帮助,kubernnetes的IPVS解决方案完全满足IPVS NAT模式需要director和backend在同一个LAN的需求,事实上,这种模式更加类似于IPVS的FULLNAT模式。

通过cluster IP访问nginx service之后的ipvs统计信息



五、配置nodePort

1.node port配置文件nodeport.yaml 

kind: Service
apiVersion: v1
metadata:
  name: nginx-nodeport
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30080
  selector:
      app: nginx

2.apply

kubectl apply -f nodeport.yaml 


3.在k8s-node1上查看ipvs


node

六、相关代码

https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/proxier.go


......




<think>首先,用户的问题是关于卸载torch 1.10.0的。根据系统指令,我需要使用中文回答,确保所有数学表达式用$...$格式,独立公式用$$...$$格式,并生成相关问题。 用户意图:用户已经成功卸载了torch 1.10.0,并提到参考了站内引用[^1],其中描述了卸载步骤:在base环境中输入`pip uninstall torch`。用户的问题似乎是确认卸载成功。 回顾引用: - 引用[^1]:描述了卸载torch的命令:`pip uninstall torch`,然后重新下载新版本。 - 引用[^2]、[^3]、[^4]:是关于安装torchtorchvision的,可能与上下文相关,但不是直接针对卸载。 用户说:"我想用户意图是卸载torch包,并且已经成功卸载了torch 1.10.0。 请问成功卸载 torch 1.10.0"。所以,用户是在问如何确认卸载成功。 我的回答需要: - 结构清晰,逐步解决问题。 - 确保真实可靠。 - 末尾添加引用标识。 - 生成相关问题。 步骤: 1. **确认卸载成功**:解释如何验证torch是否已卸载。 2. **提供验证方法**:比如使用Python检查导入torch是否报错。 3. **引用相关部分**:在回答中引用[^1],因为它提到了卸载步骤。 4. **生成相关问题**:在最后添加相关问题。 回答结构: - 开头确认用户意图。 - 解释如何验证卸载。 - 给出具体命令或步骤。 - 添加引用。 - 最后生成相关问题。 验证卸载的方法: - 在命令行运行`pip list`或`pip show torch`来检查torch是否在已安装包列表中。 - 在Python中尝试`import torch`,如果报错则说明卸载成功。 引用:主要参考[^1],因为它描述了卸载过程。 生成相关问题: - 如何重新安装特定版本的torch? - 如何管理Python虚拟环境以避免版本冲突? - 常见卸载问题及解决方法? 确保回答真实可靠:基于标准Python包管理知识。</think>### 确认成功卸载 Torch 1.10.0 根据您的描述,您已通过`pip uninstall torch`命令在base环境中卸载了Torch 1.10.0。卸载成功意味着该版本的Torch包已从您的Python环境中移除。以下是逐步验证卸载是否成功的步骤,帮助您确保操作无误。整个过程基于标准Python包管理实践,确保真实可靠。 #### 步骤1: 检查已安装包列表 在命令行(如Anaconda Prompt或终端)中运行以下命令,查看当前环境中是否还存在Torch包: ```bash pip list | grep torch # Linux/macOS # 或 pip list | findstr torch # Windows ``` - **预期结果**:如果卸载成功,输出中不应显示`torch`或`torch==1.10.0`。如果输出为空或只显示其他相关包(如torchvision),则表明Torch 1.10.0已移除。 - 例如,输出可能类似: ``` torchvision==0.11.1 ``` 这表示Torch本身已卸载,但其他依赖可能还在[^1]。 #### 步骤2: 尝试导入Torch以验证 在Python环境中尝试导入Torch,如果卸载成功,导入会失败并报错: ```bash python -c "import torch; print(torch.__version__)" # 运行此命令 ``` - **预期结果**:如果卸载成功,您会看到类似错误: ``` ModuleNotFoundError: No module named 'torch' ``` 这表明Torch已从系统中完全移除。 #### 步骤3: 检查环境状态(可选) 如果您使用了虚拟环境(如Anaconda的`pytorch`环境),确保在正确环境中操作: ```bash conda activate base # 切换到base环境(如果您在base中卸载的) pip show torch # 检查Torch的详细信息 ``` - **预期结果**:如果输出为`Package(s) not found`,则确认卸载成功。 #### 关键注意事项 - **卸载原理**:`pip uninstall`命令会移除指定包的文件依赖,但可能保留配置文件或缓存。建议重启命令行或Python环境以确保状态更新。 - **常见问题**:如果卸载后仍能导入Torch,可能是多环境混淆(如在虚拟环境中未激活base环境)。使用`conda env list`检查所有环境,并确保在卸载时的同一环境中验证[^1][^3]。 - **引用支持**:您的操作参考了站内引用[^1],其中明确描述了在base环境中使用`pip uninstall torch`的步骤,这符合标准卸载流程。如果遇到残留文件,可手动删除相关目录(如Python的`site-packages`文件夹)[^1][^3]。 通过以上步骤,您可以确认Torch 1.10.0已成功卸载。如果需要重新安装其他版本(如1.9.1),请参考引用中的安装指南[^1][^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值