主机配置(centos系统)
主机类型 | 主机 | Kubernetes版本 | 配置 |
---|---|---|---|
master | 192.168.0.101 | v1.20 | 4C4G |
node | 192.168.0.102 | v1.20 | 4C2G |
基础环境配置
-
配置yum源
- 不建议使用CentOS 7 自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。
- 使用阿里云源替换:
yum install -y wget wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache
-
关闭防火墙
systemctl stop firewalld & systemctl disable firewalld
-
关闭Swap
类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。
- 执行swapoff -a可临时关闭,但系统重启后恢复
- 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭
- 或直接执行:
sed -i '/ swap / s/^/#/' /etc/fstab
-
修改hostname
- master:
vi /etc/hostname
- 修改为master
- node:
vim /etc/hostname
- master:
-
修改host:
vim /etc/hosts
- 192.168.56.101 master
- 192.168.56.102 node
安装docker(使用阿里云安装:文档地址)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 配置docker镜像加速
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://9ep6m3b8.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
- 开机启动
systemctl enable docker.service
- 在安装k8s之前备份一下虚拟机,以便安装失败直接重新替换虚拟机
命令补全
- 安装bash-completion
yum -y install bash-completion
- 加载:bash-completion
source /etc/profile.d/bash_completion.sh
安装k8s
- 添加k8s国内源
cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF [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 EOF
- 安装K8s所需要的3个组件
yum install -y kubeadm kubelet kubectl
- kubeadm:安装工具,使所有的组件都会以容器的方式运行
- kubectl:客户端连接K8S API工具
- kubelet:运行在node节点,用来启动容器的工具
- 启动kubelet
- 启动kubelet并设置开机启动
systemctl enable kubelet && systemctl start kubelet
- 启动kubelet并设置开机启动
- kubelet命令补全
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source ~/.bash_profile
- 内核参数修改
sysctl net.bridge.bridge-nf-call-iptables=1
sysctl net.bridge.bridge-nf-call-ip6tables=1
下载镜像
- 版本查看:
yum list kubelet --showduplicates | sort -r
- 选择当前最高版本:1.20.5-0
- 镜像下载脚本:
- vim images.sh
#!/bin/bash url=registry.cn-hangzhou.aliyuncs.com/google_containers version=v1.20.5 images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`) for imagename in ${images[@]} ; do docker pull $url/$imagename docker tag $url/$imagename k8s.gcr.io/$imagename docker rmi -f $url/$imagename done
- 执行脚本,下载镜像:chmod u+x images.sh && ./images.sh
- 下载coredns镜像(版本可以根据kubeadm init提示的版本下载)
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
- 查看docker镜像:docker images
master节点安装
- 初始化master
- 初始化:
kubeadm init --apiserver-advertise-address 192.168.56.101 --kubernetes-version v1.20.5 --pod-network-cidr=10.244.0.0/16
pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案。 记住里面的join命令,可以在node节点上执行,用于加入集群
- 加载环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
- 查看系统pods,确认是否安装成功
kubectl get pods -A
- 初始化:
- 安装pod网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- master节点配置
taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的
- 删除master节点默认污点
- 查看污点:
kubectl describe node master|grep -i taints
- 删除默认污点:
kubectl taint nodes master node-role.kubernetes.io/master-
- 查看污点:
- 污点机制
- 语法:
kubectl taint node [node] key=value[effect] 其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ] NoSchedule: 一定不能被调度 PreferNoSchedule: 尽量不要调度 NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
- 打污点:
kubectl taint node master key1=value1:NoSchedule
kubectl describe node master|grep -i taints
- 删除污点:
kubectl taint nodes master key1-
- 语法:
- 删除master节点默认污点
Node节点安装
- 加入集群
- 若在master节点init时未记录join命令可以采用一下步骤重新获取令牌和命令(在master节点执行)
- 查看令牌
kubeadm token list
- 如果令牌过期,重新生成令牌
kubeadm token create
- 生成新的加密串
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
- 查看令牌
- 加入集群(node节点执行)
kubeadm join 192.168.56.101:6443 --token z9p9v7.7apn89fdg6f49gwf --discovery-token-ca-cert-hash sha256:b2f7dbf2f479c7096b2c09d499f77ef64399d15c757f4f24f443c0fbbb2a3f8d
- 在master节点执行命令查看节点:
kubectl get nodes
- 若在master节点init时未记录join命令可以采用一下步骤重新获取令牌和命令(在master节点执行)
安装kuboard
- 官网:www.kuboard.cn/
- 安装文档:www.kuboard.cn/install/v3/…
- 安装步骤:
- 启一台新的虚拟机:192.168.56.103
- 按照上面的步骤安装docker
- 安装kuboard
sudo docker run -d \ --restart=unless-stopped \ --name=kuboard \ -p 10080:80/tcp \ -p 10081:10081/udp \ -p 10081:10081/tcp \ -e KUBOARD_ENDPOINT="http://192.168.56.103:10080" \ -e KUBOARD_AGENT_SERVER_UDP_PORT="10081" \ -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \ -v /root/kuboard-data:/data \ eipwork/kuboard:v3
- 访问:http://192.168.56.103:10080
- 账号密码:admin/Kuboard123
- 添加集群
- 输入集群基本信息
- 执行导入命令(在master节点执行)
- 执行命令:
- 查看导入结果: