kubeadm部署安装
目录
环境准备
安装kubeadm、kubelet、kubectl
初始化kubeadm
设定kubectl
安装网络插件
测试
部署Dashboard
相比于二进制安装,kubeadm 安装就非常的简单
环境准备
所有节点
关闭防火墙规则、关闭selinux、关闭swap交换空间
systemctl stop firewalld
setenforce 0
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a
加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^.*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
修改各节点主机名,各个机器主机名不同
hostnamectl set-hostname master01 ---172.16.233.102
hostnamectl set-hostname node01 ---172.16.233.103
hostnamectl set-hostname node02 ---172.16.233.104
修改hosts映射文件
vim /etc/hosts
调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
使参数生效
sysctl --system
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
配置加速器,使用Systemd管理的Cgroup来进行资源控制与管理
cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com"],
> "exec-opts": ["native.cgroupdriver=systemd"],
> "log-driver": "json-file",
> "log-opts": {
> "max-size": "100m"
> }
> }
> EOF
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
docker info | grep Cgroup Driver
安装kubeadm、kubelet、kubectl
所有节点
定义 kubernetes 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
设置 kubelet 开机自启
systemctl enable kubelet.service
查看初始化需要的镜像
kubead config images list
master 节点
上传 v1.20.11.zip 压缩包至 /opt 目录
uzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
批量载入镜像文件
for i in $(ls *.tar); do docker load -i $i; done
将镜像和脚本复制到 node 节点,并在node节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt
注:node1和node2 都要载入一下才行
初始化kubeadm
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
cd /opt/
vim kubeadm-config.yaml
12 行 修改为master ip
34 行 指定自己的版本号
37行 添加
末尾再添加内容
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
初始化成功,注意查看自己的token
如果不小心忘记保存或者清除了,使用命令
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
设定kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
查看集群健康状态
kubectl get cs
vim /etc/kubernetes/manifests/kube-scheduler.yaml
修改为master ip地址
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
重启kubelet
再次查看集群健康状态
安装网络插件
在所有节点部署网络插件flannel
上传 flannel.tar 到/opt 目录下 ,master 节点额外上传 kube-flannel.yml 文件
cd /opt
docker load -i flannel-v0.22.2.tar
docker load -i flannel-cni-v1.2.0.tar
将 两个文件传到node节点
scp flannel-cni-v1.2.0.tar flannel-v0.22.2.tar node01:/opt/
scp flannel-cni-v1.2.0.tar flannel-v0.22.2.tar node02:/opt/
在两个节点上进行同样的操作 (载入镜像)
应用yaml文件
kubectl apply -f kube-flannel.yml
查看 kube-flannel 命名空间内的pod
kubectl get pod -n kube-flannel
在 node 节点上执行 kubeadm join 命令加入群集
kubeadm join 172.16.233.102:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:72afcf0e500aaf3838baae03b69a5d062420cdb4455ba886c2a3a42c41a4fc01
成功,我们去master节点 get node 看一下
kubectl get node
有了
再在node02 节点做同样操作
kubectl get pods -n kube-system
至此 k8s 安装完成
测试
测试一下
创建一个nginx资源
kubectl create deployment nginx --image=nginx
查看,需要稍等一下,等资源拉取成功
kubectl get pods -o wide
暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc
测试访问
curl http://172.16.233.103:32485
成功
部署Dashboard
master
上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
kubectl apply -f recommended.yaml
创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
浏览器访问 https://172.16.233.103:30001
使用token登录即可