1、初始化集群信息

这里我才用了两台虚拟机来搭建集群,一个master,一个node

角色

IP地址

组件

master

192.168.126.137

docker, kubectl, kubeadm, kubelet

node1

192.168.126.138

docker, kubectl, kubeadm, kubelet

2、设置系统主机名以及host文件相互解析

hostnamectl set_hostname master
hostnamectl set_hostname node1

两台机器都修改/etc/hosts文件为

192.168.126.137 master
192.168.126.138 node1

3、为sudo设置无密码

修改 /etc/suoders,该文件默认无写操作文件,需要先修改文件权限,之后再恢复。千万不要修改权限为777,会造成无法使用。修改内容为:

%sudo ALL=(ALL:ALL) NOPASSWD:ALL

4、关闭swap分区

这是一个经过讨论的结论,当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中,会影响性能上的不确定性,官方1.8版本之后就默认不用了,除非通过参数强制打开。

swapoff -a

vim /etc/fstab
删除带有swap的所在行

5、安装docker并配置cgroup驱动程序

apt install docker.io

容器运行时和kubectl都会有一个名为"cgroup driver"的属性,以此来对linux机器上的cgroup管理,对于基于Kubeadm的安装,推荐使用systemd驱动,不推荐使用cgroupfs。这里Kubeadm在init的时候,会默认设置为systemd。

但在docker上的cgroup driver默认使用cgroupfs,这里需要更改为systemd。

vim /etc/docker/daemon.json

{
"exec-opts": ["native.cgroupdriver=systemd"]
} systemctl daemon-reload
systemctl restart docker

6、让iptables看到桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

7、更新 apt 包索引并安装使用 Kubernetes apt 存储库所需的包

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

8、安装 kubeadm

sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

9、更新apt包索引,安装kubelet、kubeadm和kubectl,并锁定版本

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

10、通过kubeadm初始化集群

kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=192.168.126.137

更多参数说明详见官方文档:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file

如果想要kubectl在非root用户下工作,需要运行

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

默认情况下,出于安全原因,集群不会在控制平面节点上调度 Pod。如果希望能够在控制平面节点上调度 Pod,需要执行

kubectl taint nodes --all node-role.kubernetes.io/master-

11、安装pod网络插件

需要部署一个容器网络接口(CNI)基于pod网络的附加组件,来支持pod之间可以相互通信,在未安装之前,集群的DNS(CoreDNS)不会启动,节点也会处于NotReady状态,最好只安装一种网络插件,这里提供两种。

11.1、calico插件

这里使用calico的插件,官方文档见https://docs.projectcalico.org/getting-started/kubernetes/quickstart

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

11.2、flannel插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

12、工作节点加入主节点

2-9的步骤,在工作节点上也需要执行,在第10步执行完毕后,会出现下面的提示,来让你直接将工作节点加入集群

在工作节点直接执行上面的命令即可,模板见下,如果没记住上述的信息,需要重新获取token和hash

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

12.1、获取token

kubeadm token list

输出类似:

TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
i3alge.g5svy9uvg32pysn8 3h 2021-11-18T10:28:11Z authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token

12.2、获取hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

输出类似:

9ae1248a35f868671790b8cc9ec75a9b2701fece96d14ffae56fcdd70e16fd33

13、查看集群

kubectl get nodes

最新文章

  1. CGRectGet *** 获取控件坐标的方法
  2. mysql 启动服务
  3. Java爬虫搜索原理实现
  4. 46.谈谈SDRAM的作用
  5. Linux——搭建PHP开发环境第四步:composer
  6. qt Graphics View Framework(非重点)
  7. sqlserver安全加固
  8. FPGA 设计流程,延迟,时间
  9. $.extend 用法
  10. js 控制随机数生成概率
  11. macTypeError: slice indices must be integers or None or have an index method
  12. A1127. ZigZagging on a Tree
  13. jQuery(二)button事件改变标签值
  14. 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
  15. 【ZJOI 2019】麻将(dp of dp)
  16. a label can only be part of statement and a declaratioin is not a statement
  17. False Ordering LightOJ - 1109(暴力。。唉,。又是一个水题。。)
  18. 两个事务 update同一张表出现的死锁问题 (转载)
  19. iOS 推送功能打包后获取不到deviceToken
  20. 关于CentOS系统中,文件权限第11位上是一个点的解读

热门文章

  1. element UI遇到的问题
  2. JAVA发送POST请求携带JSON格式字符串参数
  3. 重学c#系列——datetime 和 datetimeoffset[二十一]
  4. 【LeetCode】899. Orderly Queue 解题报告(Python)
  5. 【LeetCode】417. Pacific Atlantic Water Flow 解题报告(Python & C++)
  6. 【LeetCode】662. Maximum Width of Binary Tree 解题报告(Python)
  7. 1092 - Lighted Panels
  8. 关于wlw连接wordpress的问题
  9. SHARPENING (HIGHPASS) SPATIAL FILTERS
  10. [数据结构]严蔚敏版(C数据结构)配套实现程序111例