https://blog.csdn.net/wenjianfeng/article/details/93347306
https://www.cnblogs.com/python-cat/p/10831419.html
master部署
前提条件:docker已部署
添加yum源
vi /etc/yum.repos.d/kubernetes.repo
[Kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装
kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。
kubeadm 用于初始化 Cluster。
kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
yum install kubelet kubeadm kubectl -y
检查swap和桥接
cat /proc/sys/net/bridge/bridge-nf-call-iptables 1 free -m total used free shared buff/cache available Mem: 991 151 365 7 475 674 Swap: 0 0 0
初始化
--image-repository string:这个用于指定从什么位置来拉取镜像
--kubernetes-version string:指定kubenets版本号(看一下之前安装的版本)
--apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。
--pod-network-cidr指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.2 --apiserver-advertise-address 10.0.0.80 --pod-network-cidr=10.244.0.0/16
成功的话是以下信息,按照提示,先配置集群信息
Your Kubernetes control-plane has initialized successfully! 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 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/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.0.0.80:6443 --token 7yasz7.oouxo59ravh4eitz --discovery-token-ca-cert-hash sha256:545678e30451193c605e170ba3f8b8e500b9a5c7d0bb54bd00eb7c7113a4308d
配置完,kubectl就能用了
获取组件状态
kubectl get cs NAME STATUS MESSAGE ERROR scheduler Healthy ok etcd-0 Healthy {"health":"true"} controller-manager Healthy ok
为了使用更便捷,启用 kubectl 命令的自动补全功能。
echo "source <(kubectl completion bash)" >> ~/.bashrc
配置flannel网络
要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。
Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal。
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署完后,可以在系统名称空间里看到pod
# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-6wkt6 1/1 Running 0 28d coredns-7ff77c879f-m2crn 1/1 Running 0 28d etcd-masterpub-10.0.0.80-hd1 1/1 Running 0 28d kube-apiserver-masterpub-10.0.0.80-hd1 1/1 Running 0 28d kube-controller-manager-masterpub-10.0.0.80-hd1 1/1 Running 5 28d kube-flannel-ds-amd64-qxb9w 1/1 Running 0 28d kube-flannel-ds-amd64-vff5m 0/1 Evicted 0 6m5s kube-proxy-b957k 1/1 Running 0 28d kube-proxy-wlb86 1/1 Running 0 28d kube-scheduler-masterpub-10.0.0.80-hd1 1/1 Running 3 28d
部署node
添加yum,安装kubelet kubeadm kubectl,检查桥接是否为1。
然后按照master部署好之后给出的提示,运行kubeadm join。
这时在master上跑kubectl get nodes,node已经有,但是还未ready
node上启动kubelet,就会ready
systemctl restart kubelet systemctl enable kubelet
token
node加入集群使用的token,默认是有有效期的,过期之后node就需要使用新的token
# kubeadm token create W0602 14:40:46.337640 28438 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] x56kjm.7e6t3iz2x9y3d93t
# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS yjd9de.axl9y80ztcjqevce 23h 2020-06-03T14:22:48+08:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
CNI网卡
上面初始化的时候,pod网络是10.244.0.0/16。
查看master,是0.1网段
7: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000 link/ether 82:03:38:b5:ca:49 brd ff:ff:ff:ff:ff:ff inet 10.244.0.1/24 scope global cni0 valid_lft forever preferred_lft forever
node1,是1.1网段
43: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000 link/ether fa:fe:aa:1a:cf:40 brd ff:ff:ff:ff:ff:ff inet 10.244.1.1/24 scope global cni0 valid_lft forever preferred_lft forever
K8s集群内部的pod是可以相互通信的,查看部署的容器,会发现,如果分配到某个网段的node,就会有这个网段的ip地址。
这样,就可以保证pod地址的唯一性