Kubeadm快速部署k8s集群
1.安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
- 一台或多台机器,操作系统 CentOS7.x-86_x64
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
- 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
- 禁止swap分区
2.准备环境
2.1主机规划
角色 |
IP |
备注 |
master |
192.168.1.80 |
|
node1 |
192.168.1.81 |
|
node2 |
192.168.1.82 |
|
2.2关闭防火墙
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
2.3关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
2.4根据规划设置主机名和hosts文件
hostnamectl set-hostname <hostname>
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.1.80 k8smaster
192.168.1.81 k8snode1
192.168.1.82 k8snode2
EOF
2.5流量传递和时钟同步
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
3.所有节点安装docker/kubeadm/kubelet
3.1安装docker
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# yum list docker-ce --showduplicates|sort -r
# yum -y install docker-ce-18.06.3.ce-3.el7
# systemctl enable docker && systemctl start docker
# docker version
Version: 18.06.3-ce
3.2 添加阿里云YUM软件源
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 list kubelet --showduplicates|sort -r
3.3 安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
4. 部署Kubernetes Master
在192.168.1.80(Master)执行。
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
$ kubeadm init \
--apiserver-advertise-address=192.168.1.80 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
输出如下,需要记住,
…Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.1.80:6443 --token 14zmjk.77k0l5d7f184lynv \
--discovery-token-ca-cert-hash sha256:b8f8276dac835c51befa418d6184a2cddbe80a39031c142e8500df37aafbba34
使用kubectl工具:
[root@k8smaster ~]# mkdir -p $HOME/.kube [root@k8smaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@k8smaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@k8smaster ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8smaster NotReady master 2m17s v1.18.0
5. 加入Kubernetes Node
在192.168.1.81/82(Node)执行。
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
$ kubeadm join 192.168.1.80:6443 --token 14zmjk.77k0l5d7f184lynv \
--discovery-token-ca-cert-hash sha256:b8f8276dac835c51befa418d6184a2cddbe80a39031c142e8500df37aafbba34
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
[root@k8smaster ~]# kubectl get nodes # 查看集群信息
NAME STATUS ROLES AGE VERSION
k8smaster NotReady master 5m13s v1.18.0
k8snode1 NotReady <none> 62s v1.18.0
k8snode2 NotReady <none> 49s v1.18.0
6. 部署CNI网络插件
下载容器镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/weaveworks/weave-kube:2.8.1 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/weaveworks/weave-kube:2.8.1 netcorecore/weave-kube:v2.8.1 docker pull netcorecore/weave-npc:v2.8.1
每个节点都需要这两个镜像(含master和node)
部署网络插件到集群
wget http://static.corecore.cn/weave.v2.8.1.yaml
kubectl apply -f weave.v2.8.1.yaml
kubectl get pods -n kube-system |grep weav
weave-net-ctt2w 2/2 Running 0 28m
weave-net-jbpjw 2/2 Running 1 28m
weave-net-vq545 2/2 Running 0 28m
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster Ready master 117m v1.18.0
k8snode1 Ready <none> 113m v1.18.0
k8snode2 Ready <none> 113m v1.18.0
7. 测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment myapp --image=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wangyanglinux/myapp:v1
kubectl expose deployment myapp --port=80 --type=NodePort
kubectl get pod,svc -owide
curl 192.168.1.81:31288
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
访问地址:http://NodeIP:Port
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性