k8s环境部署
k8s的环境搭建
K8s
环境搭建
1.配置虚拟机
1)这里使用3台 操作系统为centos7
的虚拟机。配置为2核,2G内存,40G硬盘。
master
: 192.168.229.100node1
:192.168.229.101node2
:192.168.229.102
2)!!!!!一定要注意,centos7
的内核版本要大于4,本文使用的是6.6.4-1.el7.elrepo.x86_64
。如果内核小于4建议升级内核,其方法网上都有参考,升级至最新就可以了。
# 查看自己虚拟机的内核
uname -r
2.配置虚拟机基础设置
在配置虚拟机时,很多配置3台虚拟机都需要进行配置,为了方便可以使用MobaXterm
软件,可以进行3台虚拟机的同屏操作,方便设置,如下图所示。具体的下载和使用方法,网上都有说明。
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名(这个主机名一般在配置虚拟机的时候就设置了)若没设置则安装以下格式进行设置
# 这里设置的主机名为master,node1,node2
hostnamectl set-hostname <hostname>
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
# 在master添加hosts(这里将ip地址换成自己虚拟机的地址,主机名也和设置的虚拟机主机名对应)
cat >> /etc/hosts << EOF
192.168.229.100 master
192.168.229.101 node1
192.168.229.102 node2
EOF
# 将桥接的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
和kubelet
的版本一定要对应,否则在启动kubelet
时,会报让你降级docker
的错误。
1)使用版本为20.10.6-3
的docker
。(以下安装步骤为第一次在虚拟机上安装docker)。
# Step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step3: 安装20.10.6-3版本的docker
yum install docker-ce-20.10.6-3.el7 docker-ce-cli-20.10.6-3.el7 containerd.io
# Step 4: 开启Docker服务
sudo service docker start
# Step 5: 设置docker开机自启
systemctl enable docker
2)添加阿里云镜像,不然在安装kublet
时找不到包。
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
2)使用版本为1.23.6
的kubelet
,kubeadm
,kubectl
。
# Step 1: 安装kubelet,kubeadm,kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
# 设置kubelet的开机自启
systemctl enable kubelet
# Step 2: 在后续启动kubelet时可能会出现无法加载cgroups文件的错误,所以需要关闭docker的cgroups文件。
vim /etc/docker/daemon.json
# Step 3: 如果在打开daemon.json文件后里面有文件则直接加入大括号中间的内容,如果为空则将下面配置整体复制。
{"exec-opts": ["native.cgroupdriver=systemd"]}
# Step 4: 重启 docker
systemctl daemon-reload
systemctl restart docker
4.部署master
节点
# 在 Master 节点下执行
kubeadm init \
--apiserver-advertise-address=192.168.229.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
初始化master
成功,如下图所示。
# 安装成功后,复制如下配置并执行
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 nodes
# 查看是否安装成功(会出现master节点的信息)
kubectl get nodes
5.加入node
节点
如果在初始化master
后没有清屏,则直接复制下图所示的命令到node1
,node2
中即可。
命令即位kubeadm join ......
1)获取token
# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list
2)获取hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
3)进行拼接(这里join 后跟自己主节点的ip
)
kubeadm join 192.168.229.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
6.部署CNI
网络插件
!!!!!注意一定要查看centos7
的内核是否大于4不然,以下执行过程中会出错。
# 查看centos7系统内核版本
uname -r
1)先进入opt
目录,然后创建k8s
文件夹,存放CNI
配置。
cd /opt
mkdir k8s
cd k8s
- 下载
calico.yaml
文件。
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
3)编辑calico.yaml
文件,将其中的CALICO_IPV4POOL_CIDR
字段设置为部署master
节点时设置的 --pod-network-cidr
。
# 编辑文件
vim calico.yaml
# 找到CALICO_IPV4POOL_CIDR字段
# 将其下面的value设置为10.244.0.0/16 (本文为10.244.0.0/16)
4)删除掉colico.yaml
文件中的前缀docker.io
,因为该文件默认是从docker
官网上拉去文件,会很慢。
sed -i 's#docker.io/##g' calico.yaml
5)应用colico.yaml
文件。
kubectl apply -f calico.yaml
6)以下命令可以查看节点和pod
的状态。
//查看pod的状态
kubectl get po -n kube-system
//查看节点的状态
//kubectl get no
出现下图的样式,就说明网络已经配置成功了。
7.测试kubernetes
集群
1)创建部署一个nginx
。
# 创建部署
kubectl create deployment nginx --image=nginx
2)对外暴露端口号。
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
3)查看端口信息,可以看见如下端口信息。
kubectl get pod,svc
4) 访问nginx
,如下图所示。
curl 192.168.229.100:32674
8.总结
1)至此k8s
环境的部署就结束了,在部署过程中也遇到了不少的坑,主要的问题总结如下。
- 安装的
docker
和kubelet
的版本一定要对应起来,如果直接拉取最新版本的docker
,在初始化master
节点时,会出现让降低docker
版本的提示。 - 本文安装的是
centos7
,其内核一定要大于4,否则在进行部署CNI
网络插件时,会出现找不到/sys/fs/bpf
的错误,导致pod
无法进行runing
状态,或着calico-node
一直处于init0/3
的状态。 - 上文中未指明要在
master
节点中的设置,则说明3台虚拟机都需要进行设置。
更多推荐
所有评论(0)