Windows10下Hyper-V虚拟机安装kubernetes集群(四)启动k8s

相关文章
Windows10下Hyper-V虚拟机安装kubernetes集群(一)创建虚拟机
Windows10下Hyper-V虚拟机安装kubernetes集群(二)配置虚拟机
Windows10下Hyper-V虚拟机安装kubernetes集群(三)复制虚拟机
Windows10下Hyper-V虚拟机安装kubernetes集群(四)启动k8s

一、启动master节点

  • 1、使用kubeadm启动master节点

    # 在192.168.137.10(k8s-master)节点上执行
    kubeadm init   --apiserver-advertise-address=192.168.137.10   --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.20.14   --service-cidr=10.0.0.0/16   --pod-network-cidr=10.244.0.0/16
    

    kubeadm命令参数说明

      --apiserver-advertise-address string   设置 apiserver 绑定的 IP.
      --apiserver-bind-port int32            设置apiserver 监听的端口. (默认 6443)
      --apiserver-cert-extra-sans strings    api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。
      --cert-dir string                      证书存放的目录 (默认 "/etc/kubernetes/pki")
      --certificate-key string               kubeadm-cert secret 中 用于加密 control-plane 证书的key
      --config string                        kubeadm 配置文件的路径.
      --cri-socket string                    CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI  socket 或者 存在非标准 CRI socket 时才指定.
      --dry-run                              测试,并不真正执行;输出运行后的结果.
      --feature-gates string                 指定启用哪些额外的feature 使用 key=value 对的形式。
      -h, --help                                 帮助文档
      --ignore-preflight-errors strings      忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
      --image-repository string              选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")
      --kubernetes-version string            选择K8S版本. (default "stable-1")
      --node-name string                     指定node的名称,默认使用 node 的 hostname.
      --pod-network-cidr string              指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络
      --service-cidr string                  指定service 的IP 范围. (default "10.96.0.0/12")
      --service-dns-domain string            指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")
      --skip-certificate-key-print           不打印 control-plane 用于加密证书的key.
      --skip-phases strings                  跳过指定的阶段(phase)
      --skip-token-print                     不打印 kubeadm init 生成的 default bootstrap token 
      --token string                         指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
      --token-ttl duration                   token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)
      --upload-certs                         上传 control-plane 证书到 kubeadm-certs Secret.
    
  • 2、等待片刻后,会出现如下打印:
    在这里插入图片描述
    注意最下边这句话,这是worker节点加入master用的,需要保存出来。

  • 3、 根据打印提示,进行一系列配置:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    # 如果是root用户
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
  • 4、这时候可以看一下节点情况:

    kubectl get nodes
    

    在这里插入图片描述

二、加入worker节点

  • 1、 在 192.168.137.20(k8s-node01)节点执行上边保存下来的命令:

    kubeadm join 192.168.137.10:6443 --token bjxbuj.sf5ihqfq956225zc \
    --discovery-token-ca-cert-hash sha256:e41b256edd1b35b1ce081980fa81907e7ceb8204723b27d946bebb74e3389d39
    

    在这里插入图片描述

    如图表示加入成功,这时在master节点执行如下命令,可以查看到

    kubectl get nodes
    

    在这里插入图片描述

    可能出现报错情况

    [root@k8s-node02 ~]# kubeadm join 192.168.137.10:6443 --token bjxbuj.sf5ihqfq956225zc
    > --discovery-token-ca-cert-hash sha256:e41b256edd1b35b1ce081980fa81907e7ceb8204723b27d946bebb74e3389d39
    [preflight] Running pre-flight checks
    error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    [ERROR FileContent–proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
    [preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
    To see the stack trace of this error execute with --v=5 or higher

    解决方法

    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/ipv4/ip_forward
    

三、依照上述方法, 将其它节点加入master即可。

四、其它错误情况(有问题就持续更新)

  • 1、 节点一直为 NoteReady.
    # 查看master启动的组件
    kubectl get pods -n kube-system -o wide
    
    # 拉取flannel
    docker pull quay.io/coreos/flannel:v0.9.1-amd64
    
    # 创建配置文件
     mkdir -p /etc/cni/net.d/
     
     cat <<EOF> /etc/cni/net.d/10-flannel.conf
    > {"name":"cbr0","type":"flannel","delegate": 						{"isDefaultGateway": true}}
    > EOF
    
    mkdir /usr/share/oci-umount/oci-umount.d -p
    
    mkdir /run/flannel/
    
    cat <<EOF> /run/flannel/subnet.env
    > FLANNEL_NETWORK=172.100.0.0/16
    > FLANNEL_SUBNET=172.100.1.0/24
    > FLANNEL_MTU=1450
    > FLANNEL_IPMASQ=true
    > EOF
    
    vim /etc/sysconfig/kubelet
    # KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    
    kubectl get pods --all-namespaces
    # 删除0/1的组件
    kubectl delete pod  coredns-7f89b7bc75-qnx84 -n kube-system
    
    # 将 master节点下的  /etc/cni/net.d/10-flannel.conf 复制到工作节点的相同目录下
    
    # 主节点查看节点状态即可
    
<think>好的,用户想要找关于Java Stream的练习题和学习资料。首先,我需要回忆一下相关的知识点,并结合提供的引用内容来整理答案。 首先,用户提供的引用中有四个关于Stream的资料,其中提到了练习题、示例代码以及基础教程。比如引用3提到StreamJava 8的重要特性,允许声明式处理集合,这可能适合作为教程部分的推荐。引用1和引用2给出了具体的练习题,如转换并行、处理绝对值、使用flatMap拆分单词等。引用4则展示了过滤偶数的例子,这些都是很好的练习题素材。 接下来,我需要将这些内容分类整理,可能分为基础概念、练习题推荐和学习资源。同时,用户可能需要教程链接或书籍推荐,但根据引用中没有提供外部链接,可能需要建议官方文档或知名网站。 还要注意用户提到的系统级指令,比如数学公式的格式,但这次问题不涉及数学内容,所以可能不需要处理这部分。另外,生成相关问题的时候,要确保问题与Stream相关,并且基于已有的引用内容。例如,如何优化Stream性能、并行的使用场景、map和filter的区别等。 需要检查是否有遗漏的要点,比如用户可能对Stream的中间操作和终端操作有疑问,或者想了解常见的陷阱。所以在相关问题里可以包括这些方面。 最后,确保回答结构清晰,分点列出,并且每个部分都有对应的引用支持。例如,在练习题部分具体列出每个练习并标注引用来源,这样用户能清楚知道每个例子出自哪里。同时,学习资源部分可以推荐官方文档和书籍,如《Java 8实战》。 总结一下,回答应该包括基础概念、练习题示例、学习资源和相关问题,确保每个部分都有引用支持,并且语言自然畅。</think>### Java Stream学习资源与练习题整理 #### 一、Stream基础概念 StreamJava 8的核心特性之一,允许以声明性方式处理集合数据,支持函数式编程风格。例如: ```java list.stream().filter(n -> n % 2 == 0).forEach(System.out::println); ``` 这段代码通过`filter`筛选偶数并输出[^4]。Stream的核心操作包括中间操作(如`map`、`filter`)和终端操作(如`forEach`、`collect`)[^3]。 --- #### 二、经典练习题推荐(含代码示例) 1. **取元素绝对值** ```java Stream.of(1, -2, -3, 4, -5) .map(Math::abs) .forEach(System.out::println); // 输出1,2,3,4,5 [^2] ``` 2. **拆分单词并合并** ```java List<String> words = Arrays.asList("Hello World", "Java Stream"); words.stream() .flatMap(word -> Arrays.stream(word.split(" "))) .forEach(System.out::println); // 输出拆分后的单词[^1] ``` 3. **过滤奇数保留偶数** ```java List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10); list.stream() .filter(n -> n % 2 == 0) .forEach(System.out::println); // 输出2,4,6,8,10 ``` 4. **并行加速计算** ```java list.parallelStream() // 转换为并行 .filter(...); // 利用多核处理器提升性能[^1] ``` --- #### 三、学习资源推荐 1. **官方文档** Oracle Java 8 Stream官方教程:系统介绍Stream API的设计与使用场景。 2. **书籍《Java 8实战》** 详细讲解StreamLambda表达式等特性,含大量代码示例。 3. **综合教程与练习题集** - 的入门教程:涵盖Stream操作分类(中间操作、终端操作)和常见用例。 - 中的练习题:覆盖`map`、`filter`、`flatMap`和并行等核心操作。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值