kubeadm是一个快速部署kubernetes集群的工具,可用于开发,kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。
环境信息:
1.操作系统:CentOS Linux release 7.7.1908 (Core)
2.docker:19.03.12
3.kubernetes:1.18.5
组件配置信息:
节点名称 | 节点IP |
---|---|
master | 192.168.13.132 |
node1 | 192.168.13.130 |
node2 | 192.168.13.128 |
1. 准备环境,每个节点都需要执行:
1.1关闭防火墙,禁止防火墙开机启动
$ systemctl stop firewalld
$ systemctl disable firewalld.service
1.2关闭selinux
$ sed -i 's/enforcing/disabled/' /etc/selinux/config
$ setenforce 0
1.3关闭swap
$ swapoff -a #临时
$ vi /etc/fstab #永久 ,然后注释SWAP分区
1.4修改主机和host解析
$ vi /etc/hosts
1.5安装依赖包
$ yum install -y epel-release
$ yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
1.6同步时间,加载内核模块
$ ntpdate time1.aliyun.com
$ modprobe ip_vs_rr
$ modprobe br_netfilter
1.7修改内核参数
$ cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
$ sysctl -p /etc/sysctl.d/kubernetes.conf
2. 安装kubernetes和docker
2.1.添加kubernetes的yum源
$ cat <<EOF >>/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
EOF
2.2添加docker的yum源
$ wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3安装docker
$ yum -y install docker-ce
2.4启动docker
$ systemctl enable docker
$ systemctl start docker
$ cat <<EOF >>/etc/docker/daemon.json
{
"registry-mirrors": ["https://dlbpv56y.mirror.aliyuncs.com"]
}
EOF
$ systemctl restart docker
2.5安装kubeadm,kubelet和kubectl
$ yum -y install kubelet kubeadm kubectl
$ systemctl enable kubelet
2.6部署Kubernetes Master
这个需要在master节点安装
$ kubeadm init --apiserver-advertise-address=192.168.13.132 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.5 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
安装完成之后,输出内容的最后一句保存下来,后面node加入需要用到,类似下面这样的:
kubeadm join 192.168.13.132:6443 --token 4s44ov.pb2rgo6uxw9pnbg2
--discovery-token-ca-cert-hash sha256:2afacd14f31cc535ae3e35204ba597e6ae356fe447ab165cb09e7ed2fd0a93dd
然后在master节点创建文件夹
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config
3.安装flannel
由于国内网络问题,所以需要手动pull一个镜像,然后更改名称,因为kube-flannel.yml里面引用的有quay.io/coreos/flannel。
在集群的所有机器上执行:
3.1手动拉取flannel的镜像
$ docker pull easzlab/flannel:v0.11.0-amd64
重新打标签
$ docker tag easzlab/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
删除无用镜像
$ docker rmi easzlab/flannel:v0.11.0-amd64
3.2下载并安装flannel资源配置清单,在master执行
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f kube-flannel.yml #执行kube-flannel.yml文件
如果执行报错如下,是文件问题,使用我的kube-falannel.yml文件,百度网盘链接:https://pan.baidu.com/s/1Z-tES6630Mq_634FY6F_wg 提取码:jvta :
error: error parsing kube-flannel.yml: error converting YAML to JSON: yaml: line 123: mapping values are not allowed in this context
4.node节点加入集群
4.1把刚才在kubeadm join 上保存的内容,在node节点上执行,注意复制的内容是否有斜杠:
$ kubeadm join 192.168.13.132:6443 --token 4s44ov.pb2rgo6uxw9pnbg2 --discovery-token-ca-cert-hash sha256:2afacd14f31cc535ae3e35204ba597e6ae356fe447ab165cb09e7ed2fd0a93dd
4.2查看集群的node状态
$ kubectl get nodes
4.3测试一下kubernetes集群
在Kubernetes集群中创建一个pod,设置80端口以及Service为NodePort的外网访问
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc
查询pod是否成功READY,并查看端口
访问任意NodeIP加端口,都可以访问则成功,http://192.168.13.128:30915/
加入新的node节点到集群需要token,token默认的有效期为24小时,需重新生成,如下:
#查看当前的token列表
$ kubeadm token list
# 重新生成新的token
$ kubeadm token create
# 重新生成新的ca证书
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
#节点加入集群
$ kubeadm join --token 新的token --discovery-token-ca-cert-hash sha256:新的ca证书