本文通过kudeadm方式在centos7上安装kubernetes集群:
一、k8s安装准备工作;
二、Docker安装;
三、Master节点安装;
四、Node节点安装;
五、集群测试。
一、k8s安装前的准备工作
1.1 kubeadm
Kubeadm是一个部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
1.2 查看centos版本
这里使用centos7系统,查看centos版本:
rpm -q centos-release
1.3关闭防火墙、selinux、和swap
关闭防火墙
systemctl disable firewalld --now
临时关闭setlinux:
setenseforce 0
永久关闭的方法:
vim /etc/selinux/config
SELINUX=enforcing改为SELINUX=disabled,保存后退出
swapoff -a #临时关闭 # free 查看
永久关闭:
sed -i.bak '/swap/s/^/#/' /etc/fstab
1.4内核参数修改,内核调整,将桥接的IPv4流量传递到iptables的链
永久修改
[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward =1
EOF
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
二、Docker安装;
2.1 docker部署
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0 -- 设置0不做公钥检查
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/yum-package-key.gpg
--这里是设置docker的yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存
[root@master ~]# yum clean all
[root@master ~]# yum -y makecache
2.2安装docker ,每个节点都需要安装
yum list docker-ce --showduplicates | sort -r --该命令是查看仓库中所有的docker的版本并选择版本安装
yum -y install docker-ce-18.06.1.ce-3.el7 --指定下载该版本的docekr
或者下载最新的版本 yum install docker-ce
2.3 配置国内镜像加速器
登陆地址为:https://cr.console.aliyun.com ,未注册的可以先注册阿里云账户,选择容器镜像服务,配置镜像加速器
配置docekr的镜像地址命令
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://wp6q9kkn.mirror.aliyuncs.com"]
}
重启服务验证
[root@centos7 ~]# systemctl restart docker
[root@centos7 ~]# docker --version
[root@centos7 ~]# docker run hello-world
1.19版之后k8s要求docker和k8s都使用systemd的cgroupDriver
修改daemon.json,新增
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
2.4 安装k8s部署的相关工具,安装kubeadm,kubelet和kubectl
在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不同导致的奇怪问题。不指定版本会安装最新版的工具
yum install -y kubelet-<version> kubectl-<version> kubeadm-<version>
yum install -y kubelet-1.21.1 kubectl-1.21.1 kubeadm-1.21.1 kubernetes-cni
安装完成后开启kubelet
systemctl enable --now kubelet
以上操作是master节点和node节点上均需要执行的操作
三、Master节点安装
3.启动kubernetes集群(master节点上执行)
3.1 kubeadm init
通过kubeadm init [flags]命令可以启动一个master节点
kubeadm init \
--apiserver-advertise-address=192.168.100.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.1 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
参数介绍
-kubernetes-version 后面的值通过 kubelet --version 查看
--apiserver-bind-port int32 Default: 6443 可以通过这个参数指定API-server的工作端口,默认是6443。
--config string 可以通过这个命令传入kubeadm的配置文件。
--dry-run 带了这个参数后,运行命令将会把kubeadm做的事情输出到标准输出,但是不会实际部署任何东西。强烈推荐!
-h, --help 输出帮助文档。
--node-name string 指定当前节点的名称。
--pod-network-cidr string 通过这个值来设定pod网络的IP地址网段;设置了这个值以后,控制平面会自动给每个节点设置CIDRs(无类别域间路由,Classless Inter-Domain Routing)。
--service-cidr string Default: “10.96.0.0/12” 设置service的CIDRs,默认为 10.96.0.0/12。
--service-dns-domain string Default: “cluster.local” 设置域名称后缀,默认为cluster.local。
其他参数。
建议至少2 cpu ,2G,非硬性要求,1cpu,1G也可以搭建起集群,但会有WARNING
将结果保存,后续添加节点时用得到
一定要导入环境变量才可以使用kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署容器网络插件
这个时候
kubectl get node
查看节点,会发现 节点状态是NotReady
, 这是因为我们还没有部署容器网络,下面部署flannel容器网络 参考 https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
执行kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml
,计算云里可以先把文件下载下来,再执行
(或者使用calico及其他网络插件,可参考官方文档https://kubernetes.io/zh/docs/tasks/administer-cluster/network-policy-provider/
安装时替换文件image地址为aliyun地址)
四、Node节点安装
4.1 kubeadm join node节点加入集群:
使用kubeadm join命令使node节点加入集群
在两个 Node 节点执行
使用kubeadm join 注册Node节点到Matser
kubeadm join 的内容,在上面kubeadm init 已经生成好了
kubeadm join 192.168.100.10:6443 --token yhns57.4s3y2yll21ew8mta \
--discovery-token-ca-cert-hash sha256:eeebf579f925b9a64b2fe1fde820bb1707496d8dbe6718759b93cb951c3fc651
生成一个新的token
kubeadm token create --print-join-command //默认有效期24小时,若想久一些可以结合--ttl参数,设为0则用不过期
查看token
kubeadm token list
export POD_NAME=POD_NAME