k8s和operator安装部署
搭建k8s集群
准备 1 台 uos
因只有一台uos,所以下面的操作中,master和worker节点会合并到一台机器上。
更新并安装依赖
服务器执行一下命令
apt-get update
apt-get upgrade

安装 Docker
安装版本为 18.09.1。

卸载之前安装的 docker
apt remove docker docker latest docker-latest-logrotate docker-logrotate docker-engine docker-client docker-client-latest docker-common

安装 docker
查看当前系统docker.io的版本
apt list | grep docker.io,如果是18.09.1的话,就不用指定版本安装了。

安装
apt-get install -y docker.io

启动 docker 并设置开机启动
systemctl daemon-reload
systemctl restart docker

测试 docker 安装是否成功
docker run hello-world
因网络问题,该测试可能会失败,请多试几次

固定版本,以免被误升级
apt-mark hold docker.io
安装 k8s 前环境准备
修改 hosts 文件

设置 master 的 hostname,并且修改 hosts 文件

hostnamectl set-hostname m
在master的机器上执行
vi /etc/hosts

s写入 master机器的 ip 和名称

168.1.100.124 m

#使用 ping 测试一下
ping m

系统基础前提配置
#关闭防火墙
systemctl stop ufw && systemctl disable ufw
#关闭 swap
swapoff -a
sed -i ‘/swap/s/^(.*)$/#\1/g’ /etc/fstab
#`配置 iptables 的 ACCEPT 规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

#设置系统参数
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#查看系统设置
sysctl --system

安装 kubeadm, kubelet and kubectl
下载最新kubectl
apt-get update && apt-get install -y apt-transport-https

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

cat </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

安装 kubeadm&kubelet&kubectl (指定版本,因为Operator是基于kubernetes 1.18-1.20制作的)
apt-get update

apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00

固定版本,以免被误升级
sudo apt-mark hold kubelet kubeadm kubectl

设置 docker 和 k8s 同一个 cgroup
vi /etc/docker/daemon.json
【文件没内容的话,就新建;有的话,就加上这 一句,注意文件的格式[逗号]】
{
“exec-opts”: [“native.cgroupdriver=systemd”]
}

重启 docker和kubelet,并设置为自启动【一定要执行】
systemctl restart docker 【重启 docker,一定要执行】
systemctl enable docker
#配置 kubelet
sed -i “s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g” /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 【找不到内容没关系】

重启kubelet,并设置为自启动【一定要执行】
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet

查看 kubeadm 使用的镜像
kubeadm config images list

初始化 master 节点【只在 master 节点上执行】
拉取必要的镜像
虽然上一步显示的很多插件版本都是1.18.19,但是实测中,使用1.18.19时,启动master时可能会有问题,所以最好还是使用1.18.0版本。

docker pull k8smx/kube-apiserver:v1.18.0
docker pull k8smx/kube-controller-manager:v1.18.0
docker pull k8smx/kube-scheduler:v1.18.0
docker pull k8smx/kube-proxy:v1.18.0
docker pull k8smx/pause:3.2
docker pull k8smx/etcd:3.4.3-0
docker pull coredns/coredns:1.6.7

docker tag k8smx/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
docker tag k8smx/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag k8smx/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
docker tag k8smx/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
docker tag k8smx/pause:3.2 k8s.gcr.io/pause:3.2
docker tag k8smx/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag coredns/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

docker rmi k8smx/kube-apiserver:v1.18.0
docker rmi k8smx/kube-controller-manager:v1.18.0
docker rmi k8smx/kube-scheduler:v1.18.0
docker rmi k8smx/kube-proxy:v1.18.0
docker rmi k8smx/pause:3.2
docker rmi k8smx/etcd:3.4.3-0
docker rmi coredns/coredns:1.6.7

重启kubelet
systemctl daemon-reload
systemctl restart kubelet

在启动前,先重置master节点
kubeadm reset

启动master
kubeadm init --kubernetes-version=“v1.18.0” --pod-network-cidr=10.244.0.0/16

#根据日志提示执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

#查看 pod
等待一会儿,同时可以发现像 etcd,controller,scheduler 等组件都以 pod 的方式安装成功了

注意:coredns 没有启动,需要安装网络插件

kubectl get pods -n kube-system 【查看 kube-system 的 pods】
这里的coredns一直处于ContainerCreating状态,等安装好calicao网络插件,就恢复正常了,这里先不管。

执行健康检查
#健康检查
curl -k https://localhost:6443/healthz

安装 calico 网络插件【只在 master 节点上安装】
master 节点初始化后还有两个 pod 没有运行成功,是因为差一个网 络插件,也可以选择其他网络插件。我这里在 master 节点上安装的 是 calico 网络插件。
查看 calico 网络插件需要 pull 哪些 image
curl https://docs.projectcalico.org/v3.9/manifests/calico.yaml | grep image 【版本会变 化,需要根据实际情况拉取镜像】

拉取 calico 镜像
docker pull calico/cni:v3.9.6

docker pull calico/pod2daemon-flexvol:v3.9.6

docker pull calico/node:v3.9.6

docker pull calico/kube-controllers:v3.9.6

在 k8s 中安装 calico
等待 calico 镜像拉取完成后就可以安装 calico 了
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml

查看 calico 是否安装成功
kubectl get pods -n kube-system

设置master节点,让master节点也参与调度
kubectl taint node m node-role.kubernetes.io/master-
m是节点的hostname主机名

初始化worker节点【只在 worker 节点上执行】
因为本次测试中,将master节点、worker节点集成到一台机器了,所以这部分内容可以不做。
拉取必要的镜像
docker pull k8smx/kube-proxy:v1.18.0
docker pull k8smx/pause:3.2

docker tag k8smx/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
docker tag k8smx/pause:3.2 k8s.gcr.io/pause:3.2

docker rmi k8smx/kube-proxy:v1.18.0
docker rmi k8smx/pause:3.2

在启动前,先重置master节点
kubeadm reset

启动worker节点
kubeadm join 192.168.32.78:6443 --token 1j5w8x.bmioq5oh214jfdl6 --discovery-token-ca-cert-hash sha256:6d7fabb0968d2e7944979071f9903fd9d8bb84c7fd5d21f6f89c4237325985f4
该命令在master启动节点时的输出结尾会出现

在master节点上检查worker节点的状态
kubectl get nodes

Ready状态即为正常

设置master的信息
查看家目录下有没有.kube目录,如果没有就创建,然后将master节点$HOME/.kube/config文件拷贝到worker节点的.kube目录下

部署tlq-operator
kubectl apply -f install.yaml

查看pod状态
kubectl get pod -n tlq9-operator-system

k8s官网操作步骤
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb

minikube start
出错:

解决:进入普通用户执行sudo usermod -aG docker $USER && newgrp docker
再次执行minikube start
出错:

解决:
先用root用户关闭docker,然后用test用户启动docker即可

minikube start --driver=none

解决:
docker system prune, minikube delete and then minikube start --driver=docker

curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.0.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

git clone https://github.com/AliyunContainerService/minikube
cd minikube
git checkout aliyun-v1.0.1
make
sudo cp out/minikube /usr/local/bin/
make时出错:

apt-get install -y kubelet=1.20.0-00 kubeadm=1.20.0-00 kubectl=1.20.0-00

#记得保存初始化 master 节点的最后打印信息【注意这边大家要自己的,下面 我的只是一个参考】
kubeadm join 192.168.0.21:6443 --token fag134.3wot9edrvs82vh6d --discovery-token-ca-cert-hash
sha256:1df02a06552c02ba0e28e00c80a50e9ff40da81a4cdd53c136a16d3c0233f
实际执行:kubeadm join 168.1.100.124:6443 --token 738o6k.j7cvzwth6j732um9 --discovery-token-ca-cert-hash sha256:91d5b986f364fe796c21fd7a5707d36dd280364c81f2f8bcdf38854b8c260ed4

450【worker 节点上面执行】
#在 master 节点上检查集群信息
kubectl get nodes

Kube join 错误异常
如果加入 master 集群报错
可能是 kubelet 的版本高于 master 的版本
此时应该先移除 apt remove kubelet,然后重新安装
#移除
apt remove kubelet
#这里如果先 kubeadm 的话 就会依赖安装 kubelet,此时版本会高于 master 节 点的版本,所以在 join 的时候就会报错
apt install -y kubelet-1.18.0-0
apt install -y kubeadm-1.18.0-0
apt install -y kubectl-1.18.0-0

虚拟机重启之后 kubeadm reset

  1. 虚拟机重启以后要在主节点和从节点执行 kubeadm reset 【初始 化集群状态,在主节点上应该把./kube 目录下的文件全部删除】
  2. 初始化主节点【kubeadm init --kubernetes-version=1.18.0 --apiserver-advertise-address=168.1.1.12 --pod-network-cidr=10.244.0.0/16】address 换成自己 master 节 点的 ip。
  3. 根据日志提示执行
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config
  4. 执行 kubectl get pods -n kube-system
    查看 pod【必须要所有的 pod 都安装成功了才安装 calico】
  5. 安装 calico 【kubectl apply -f calico.yaml】
  6. 安装 calico 之后等他所有的 Pod 运行成功后 kube join 加入集群
  7. 查看集群【kubectl get pods】

TLQ部署
加载tlq的镜像包
docker load -i tlq9broker.tar
docker load -i tlq9namesvr.tar
docker load -i tlq9-operator-v1alpha1.tar

docker load -i kube-rbac-proxy-v050.tar

部署operator
部署
这里使用的是install.yaml文件进行部署
kubectl apply -f install.yaml

查看operator的状态
kubectl get pods --all-namespaces

从这里可以看到有一个名为tlq9-operator-controller-manager-66c8777446-9rndh的pod,状态为running

部署tlq集群
部署
这里使用的是tlq-cluster.yaml文件进行部署
kubectl apply -f tlq-cluster.yaml

查看集群的状态
kubectl get pods --all-namespaces

从这里可以看到有一个名为tlqcluster-nameserver-0、tlqcluster-worker-0-0、tlqcluster-worker-1-0的pod,状态为running

查看实例的状态
kubectl get tlqnameserver -n tlqcluster
kubectl get tlqworker -n tlqcluster

三个实例的状态都为Healthy,表示正常,最后一列是访问的地址。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐