安装K8S集群
为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容。为了方便后面集群节点间的直接调用,需要配置一下主机名解析,企业中推荐使用内部的DNS服务器。根据提示,在192.168.3.120上添加如下的命令,刚刚在master节点生成的。由于kubernetes的镜像源在国外,非常慢,这
安装K8S集群
一、准备两台CentOS7主机
- 192.168.3.119
- 192.168.3.120
二、配置所有主机
设置主机名
设置192.168.3.119的主机名
hostnamectl set-hostname k8s-master
设置192.168.3.120的主机名
hostnamectl set-hostname worker-01
检查操作系统的版本
检查操作系统的版本(要求操作系统的版本至少在7.5以上)
cat /etc/redhat-release
关闭防火墙和禁止防火墙开机启动
关闭防火墙
systemctl stop firewalld
禁止防火墙开机启动
systemctl disable firewalld
关闭iptables服务
systemctl stop iptables
禁止iptables开机启动
systemctl disable iptables
关闭selinux
查看selinux是否开启
getenforce
永久关闭selinux(需要重启)
sed -i 's/enforcing/disabled/' /etc/selinux/config
reboot
检查是否关闭成功
关闭swap分区
检查swap
cat /etc/fstab
永久关闭swap分区(需要重启)
sed -ri 's/.*swap.*/#&/' /etc/fstab
设置主机名解析
为了方便后面集群节点间的直接调用,需要配置一下主机名解析,企业中推荐使用内部的DNS服务器
cat >> /etc/hosts << EOF
192.168.3.119 k8s-master
192.168.3.120 k8s-worker-01
EOF
设置时间同步
kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步
yum -y install ntpdate
ntpdate time.windows.com
将桥接的IPv4流量传递到iptables链路
#加载br_netfilter模块
modprobe br_netfilter
查看是否加载
lsmod | grep br_netfilter
内核配置
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
重新加载配置
sysctl -p
配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块
安装ipset和ipvsadm
yum -y install ipset ipvsadm
执行如下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
执行脚本文件
sh /etc/sysconfig/modules/ipvs.modules
查看对应的模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
重启两台机器
reboot
安装Docker
安装20.10.12版本
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.12-3.el7 docker-ce-cli-20.10.12-3.el7 containerd.io
配置docker镜像加速
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://nkapkbuo.mirror.aliyuncs.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
],
"insecure-registries": [],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#使配置生效
systemctl daemon-reload
#启动docker
systemctl restart docker
#开机启动docker
systemctl enable docker
#查看docker状态和版本
docker version
添加kubernetes阿里云的YUM软件源
由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all && yum makecache
yum list available | grep kube
安装kubeadm、kubelet和kubectl
yum -y install --setopt=obsoletes=0 kubeadm-1.23.9-0 kubelet-1.23.9-0 kubectl-1.23.9-0
为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容
vi /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
三、安装k8s的Master节点
集群初始化
方式一
开始安装
# 使用--image-repository参数指定镜像仓库
# 使用该方法可以不需要提前拉取镜像
kubeadm init --kubernetes-version v1.23.9 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.3.119
方式二
查看k8s所需镜像并拉取
kubeadm config images list
使用阿里云镜像下载
需要注意的是,我们要安装与
kubeadm版本一致
的镜像
#shell执行
images=(
kube-apiserver:v1.23.9
kube-controller-manager:v1.23.9
kube-scheduler:v1.23.9
kube-proxy:v1.23.9
pause:3.6
etcd:3.5.1-0
)
执行循环开始拉去镜像并改镜像名
#shell执行
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
拉取coredns镜像(镜像名有些不一样,单独处理)
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6
查看镜像是否完整
docker images | grep "k8s.gcr.io"
开始安装
kubeadm init --kubernetes-version v1.23.9 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.3.119
安装完成
根据提示消息,在Master节点上使用kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
四、安装k8s的Worker节点
根据提示,在192.168.3.120上添加如下的命令,刚刚在master节点生成的
五、安装网络插件(Master节点上)
部署CNI网络插件
在Master节点上获取calico配置文件
wget https://docs.projectcalico.org/manifests/calico.yaml
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
替换镜像源为quay.io。
sed -i 's/docker.io/quay.io/g' calico.yaml
部署Calico
kubectl apply -f calico.yaml
查看部署CNI网络插件进度
kubectl get pods -n kube-system
在Master节点使用kubectl工具查看节点状态
kubectl get nodes
查看集群健康状况
kubectl get cs
kubectl cluster-info
六、安装管理界面
rancher管理界面
vi rancher-install.sh
# 输入以下内容
#!/bin/bash
set -e
echo "[info] rancher version: v2.8.4/v2.8.3/v2.7.12/v2.7.10/v2.6.14"
echo "[info] default version: v2.7.10"
ver=v2.7.10
data_home=/opt/rancher/data
if [[ -n $1 ]]; then
ver=$1
fi
echo "[info] current version: ${ver}"
cleanup() {
echo "[info] failed"
echo "[info] clean..."
echo "[info] rm ${data_home}/${ver}"
rm -rf ${data_home}/${ver};
}
trap 'cleanup' ERR
echo "[info] creating dir: ${data_home}/${ver}"
rm -rf ${data_home}/${ver};
mkdir -p ${data_home}/${ver}/rancher;
mkdir -p ${data_home}/${ver}/log;
mkdir -p ${data_home}/${ver}/kubelet;
mkdir -p ${data_home}/${ver}/cni;
echo "[info] pulling image: rancher/rancher:${ver}"
docker pull rancher/rancher:${ver}
echo "[info] running image: rancher/rancher:${ver}"
docker run -d --restart=always --privileged=true -p 80:80 -p 443:443 -v /etc/localtime:/etc/localtime -v ${data_home}/${ver}/rancher:/var/lib/rancher -v ${data_home}/${ver}/log:/var/log -v ${data_home}/${ver}/cni:/var/lib/cni -v ${data_home}/${ver}/kubelet:/var/lib/kubelet --name rancher-${ver} rancher/rancher:${ver}
echo "[info] succeed"
vi rancher-log.sh
# 输入以下内容
#!/bin/bash
set -e
echo "[info] rancher version: v2.8.4/v2.8.3/v2.7.12/v2.7.10/v2.6.14"
echo "[info] default version: v2.7.10"
ver=v2.7.10
if [[ -n $1 ]]; then
ver=$1
fi
echo "[info] current version: ${ver}"
echo "[info] logs container: rancher-${ver}"
while true
do
ui=`docker logs rancher-${ver} | grep "complete setup in the UI"`
if [[ -n $ui ]]; then
pass=`docker logs rancher-${ver} | grep "Bootstrap Password:"`
echo "[info] ${pass}"
echo "[info] ${ui}"
exit
fi
sleep 1
done
echo "[info] succeed"
# 查看rancher界面密码
sh rancher-log.sh
将IP替换成192.168.3.119即可访问
设置密码并进入管理界面
访问地址: https://192.168.3.119/
用户名密码: admin/[界面设置的密码]
导入集群
在master节点执行导入命令
等待完成即可享用
kuboard管理
wget --no-check-certificate https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
kubectl apply -f kuboard-v3.yaml
kubectl get pods -n kuboard -o wide
等待启动完成
登录地址: http://192.168.3.119:30080
用户名密码: admin/Kuboard123
导入集群
按照上图提示操作即可
导入成功,享用吧
七、如何选择管理界面
- Rancher比较间接,操作简单,可以新建项目,按照需求将命名空间管理起来。
- kuboard界面比较美观,操作较为复杂,内容很丰富。
- 根据个人喜好进行选择即可。
八、FAQ
- The connection to the server localhost:8080 was refused - did you specify the right host or port?
vi /etc/profile
# 添加
KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile#即可解决
- rancher可能会出现的问题
则执行如下三条命令
sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-scheduler.yaml
sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-controller-manager.yaml
systemctl restart kubelet
- 污点去除
Taints: node-role.kubernetes.io/master:NoSchedule
解决方法:(以主机名为‘k8s-master’为例)
执行:
kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
kubectl describe node k8s-master | grep Taint
更多推荐
所有评论(0)