时间:2022-04-02来源:www.pcxitongcheng.com作者:电脑系统城
Calico(https://github.com/projectcalico/calico) 是针对容器、虚拟机和裸机工作负载的开源网络和安全解决方案,它提供了 pod 之间的网络连接和网络安全策略实施。
读者可参考 https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/ 这里不做过多的说明。
执行 ip addr
命令,找到 ens4
,把里面提到的 ip 记录下来。
1 2 3 4 5 6 |
ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000 link /ether 42:01:0a:aa:00:02 brd ff:ff:ff:ff:ff:ff inet 10.170.0.2 /32 scope global dynamic ens4 valid_lft 2645sec preferred_lft 2645sec inet6 fe80::4001:aff:feaa:2 /64 scope link valid_lft forever preferred_lft forever |
则 ip 是 10.170.0.2。
然后修改 /etc/hosts
文件,加上一行(替换这个ip为你的):
1 | 10.170.0.2 k8smaster |
后面我们访问集群,使用 k8smaster,而且不是使用 ip 直接访问。
执行 kubectl version
查看 k8s 版本,GitVersion:"v1.21.0"
表示的即为 k8s 版本,因为工具版本跟 k8s 版本一致。
创建一个 kubeadm-config.yaml 文件,我们使用 kubeadm init
时,通过此配置文件出初始化 k8s master。
文件内容为:
1 2 3 4 5 6 |
apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubenetesVersion: 1.21.0 controlPlaneEndpoint: "k8smaster:6443" networking: podSubnet: 192.168.0.0/16 |
注意,:
后面必须带一个空格。表示key: value
。
例如 image: nginx:letest
,不带空格的 :
会连在一起。
然后初始化 master:
1 | kubeadm init --config=kubeadm-config.yaml --upload-certs -- v =5 | tee kubeadm-init.out |
这个语句可以省略为 kubeadm init --config=kubeadm-config.yaml --upload-certs
。
--v=5
可以输出更多信息信息,tee xxx
可以让信息输出到一个文件中,方便收集日志或者后续检查。
执行初始化命令后,终端或查看 kubeadm-init.out
文件,有以下内容:
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 |
To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin .conf $HOME/.kube /config sudo chown $( id -u):$( id -g) $HOME/.kube /config Alternatively, if you are the root user, you can run: export KUBECONFIG= /etc/kubernetes/admin .conf 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 the control-plane node running the following command on each as root: kubeadm join k8smaster:6443 --token 45td1j.xqdscm4k06a4edi2 \ --discovery-token-ca-cert- hash sha256:aeb772c57a35a283716b65d16744a71250bcc25d624010ccb89090021ca0f428 \ --control-plane --certificate-key d76287ccc4701db9d34e0c9302fa285be2e9241fc43c94217d6beb419cdf3c52 Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join k8smaster:6443 --token 45td1j.xqdscm4k06a4edi2 \ --discovery-token-ca-cert- hash sha256:aeb772c57a35a283716b65d16744a71250bcc25d624010ccb89090021ca0f428 |
按照提示,我们执行:
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin .conf $HOME/.kube /config sudo chown $( id -u):$( id -g) $HOME/.kube /config |
然后:
1 | export KUBECONFIG= /etc/kubernetes/admin .conf |
笔者注:KUBECONFIG
环境变量在下次登录或新建终端窗口会失效,打开 用户目录的.bashrc
文件,在最后面加上 export KUBECONFIG=/etc/kubernetes/admin.conf
,可保证下次登录或切换终端,依然可用。
笔者注:因为涉及到多用户,所以如果切换用户,就不能使用 kubeadm/kubectl/kubelet
命令了,如果读者切换了用户,则可以执行上面 make -p $HOME/.kube
到 export xxx
这两部分的命令,这样别的用户也可以执行命令操作节点。
输入 kubeadm config print init-default
可以查看到 master 是初始化的配置。
然后下下载 calico 的 yaml 文件。
1 | wget https: //docs .projectcalico.org /manifests/calico .yaml |
然后我们需要留意 yaml 文件中的 CALICO_IPV4POOL_CIDR
的值,读者直接打开 https://docs.projectcalico.org/manifests/calico.yaml 或者使用 less calico.yaml
在终端上阅读文件。
找到 CALICO_IPV4POOL_CIDR
例如:
1 2 |
# - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" |
这个表示 ip4 池,如果 ip 不存在,则会自动创建,创建 的 pod 的网络 ip 会在这个范围。默认是 192.168.0.0
我们不需要改,如果你需要定制,则可以删除 #
,然后改动 ip。
然后我们启用 calico 网络插件:
1 | kubectl apply -f calico.yaml |
kubectl
命令和可选参数非常多,每次都要敲长长的命令,任意出错,我们可以利用 bash-completion
为我们快速完成命令的输入。
1 | sudo apt-get install bash -completion -y |
1 2 |
source <(kubectl completion bash ) echo "source <(kubectl completion bash)" >> $HOME/. bash |
我们可以测试一下。
输入 kubectl des
,然后按一下 TAB
键,会发现内容自动补全。
输入完整的 kubectl descibe nodes
可以查到 node 状态,后面的小节再聊聊 descibe nodes
的含义。
执行 kubectl descibe nodes
命令,我们可以看到节点详细的信息,其中有个 Conitions
字段,描述了所有正在运行中(Running) 的节点的状态,它有 5 个类型:
Ready
Node 是否能够接收 pod ,如果可以则 Status
为 True;如果节点不健康,不能接收 pod,则 为 False。正常情况下为 True。
DiskPressure
表示节点的空闲空间不足以用于添加新 Pod,如果为 True则说明不正常。
MemoryPressure
表示节点存在内存压力,即节点内存可用量低,如果为 True 则说明不正常。
PIDPressure
表示节点存在进程压力,即节点上进程过多;如果为 True 则说明不正常。
NetworkUnavailable
表示节点网络配置不正确;如果为 True,则说明不正常。
使用 json 表示:
1 2 3 4 5 6 7 8 9 10 |
"conditions" : [ { "type" : "Ready" , "status" : "True" , "reason" : "KubeletReady" , "message" : "kubelet is posting ready status" , "lastHeartbeatTime" : "2019-06-05T18:38:35Z" , "lastTransitionTime" : "2019-06-05T11:41:27Z" } ] |
到此这篇关于CKAD认证中部署k8s并配置Calico插件的文章就介绍到这了。
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17