说明
创建三个 centos 节点:
1 | 192.168.56.101 k8s-master |
虚拟机安装教程参考:virtualbox 下 centos7 网络配置
其中 master 节点需要至少 2 核 2G 配置
所有节点
以下操作需要在所有节点运行,这里以 master 节点为例
修改主机名
相应节点叫相应的名字,这里以 master 节点为例
1 | hostnamectl set-hostname k8s-master |
修改后重启服务器后生效
关闭防火墙
1 | systemctl stop firewalld.service |
关闭防火墙自启动
1 | systemctl disable firewalld.service |
关闭 selinux
1 | setenforce 0 |
关闭 swap
1 | swapoff -a |
vim /etc/fstab ,注释掉swap挂载这一行可以永久关闭swap分区
添加主机名与 IP 对应的关系
vim /etc/hosts 添加如下内容:
1 | 192.168.56.101 k8s-master |
将桥接的 IPV4 流量传递到 iptables 的链
1 | cat > /etc/sysctl.d/k8s.conf << EOF |
执行完再运行
1 | sysctl --system |
安装 docker
卸载旧的 docker
1
2
3
4
5
6
7
8sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine安装组件
1
2
3sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2添加 docker 安装源
1
2
3sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo安装 docker
1
sudo yum install docker-ce docker-ce-cli containerd.io
安装成功后,查看 docker 版本
1
docker --version
修改 Cgroupfs 为 Systemd (docker 文件驱动默认由 cgroupfs 改成 systemd,与k8s保持一致避免 conflict)
1
2mkdir -p /etc/docker
vim /etc/docker/daemon.json内容:
1
2
3{
"exec-opts": ["native.cgroupdriver=systemd"]
}设置开机启动
1
2systemctl enable docker
systemctl start docker查看文件驱动
1
docker info | grep Driver
Kubernetes yum源配置
vim /etc/yum.repos.d/kubernetes.repo
,添加文件内容如下:
1 | [kubernetes] |
安装 k8s
1 | yum install -y docker-ce kubelet kubeadm kubectl |
设置 k8s 开机启动
1
systemctl enable kubelet
启动 k8s 后台 daemon
1
systemctl start kubelet
master 节点运行
以下操作只在 master 节点运行,如果操作失败,可以通过先执行
rm -rf $HOME/.kube
和kubeadm reset
命令来清理环境重新安装
部署 Kubernetes Master
1 | kubeadm init --kubernetes-version=1.20.4 \ |
apiserver-advertise-address 的地址为当前节点的 ip 地址
service-cidr 设置成当前节点的网段即可
记录生成的最后部分内容,此内容需要在其它节点加入 Kubernetes 集群之前就执行。根据 init 后的提示,创建kubectl 配置文件
1 | mkdir -p $HOME/.kube |
查看 docker 镜像:
1 | sudo docker images |
下面就可以直接使用 kubectl 命令了
1 | kubectl get node |
安装 calico 网络
1 | kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml |
查看 calico 网络是否创建成功:
1 | kubectl get pods -n kube-system |
再次查看 node,可以看到 master 节点状态为 ready
至此,k8s master节点创建完毕
node 节点运行
Node 节点才需要进行的操作
node 节点加入集群
向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:复制上面命令,在 node 节点上执行在k8s-node1, k8s-node2 执行:
token 和密钥在主节点 init 会生成
如果忘记记录 token 和密钥,或者 token 过期了,可以通过以下命令获取(在 master 节点运行)
先获取 token
1
2
3
4#如果过期可先执行此命令
kubeadm token create #重新生成token
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1获取 CA 公钥的哈希值
1
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
从节点加入集群 (k8s-node1 和 k8s-node2 执行)
1
kubeadm join 192.168.56.101:6443 --token token填这里 --discovery-token-ca-cert-hash sha256:哈希值填这里
192.168.56.101:6443 —> k8s-master 节点的 ip 和端口
最终运行命令
1
kubeadm join 192.168.56.101:6443 --token ljd4iy.mk633re8cfq42ybu --discovery-token-ca-cert-hash sha256:344376e98d61c6fb52d35ab369e13dcc49c4222972d4b5f821aea4f589fe593f
在 k8s-master 查看集群节点数:
1 | kubectl get nodes |
测试 k8s
创建 nginx 实例,并暴露端口:
1
2
3kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc验证
在 web 浏览器输入以下地址,会返回 nginx 欢迎界面
http://192.168.56.101:32409/ (该端口为上图所显示)
在 linux 节点用 curl 访问,会返回 nginx html 欢迎页面的内容
node 节点配置 kubectl 配置
如果想 node 节点也可以使用 kubectl 需要进行 master 节点复制 config 文件到 node 节点
在 k8s-node1 和 k8s-node2 节点执行以下命令
1 | sudo scp [email protected]:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf |