UOS部署k8s
k8s和operator安装部署搭建k8s集群准备 1 台 uos因只有一台uos,所以下面的操作中,master和worker节点会合并到一台机器上。更新并安装依赖服务器执行一下命令apt-get updateapt-get upgrade安装 Docker安装版本为 18.09.1。卸载之前安装的 dockerapt remove docker docker latest docker-lat
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):
(id−u):(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
- 虚拟机重启以后要在主节点和从节点执行 kubeadm reset 【初始 化集群状态,在主节点上应该把./kube 目录下的文件全部删除】
- 初始化主节点【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。
- 根据日志提示执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config - 执行 kubectl get pods -n kube-system
查看 pod【必须要所有的 pod 都安装成功了才安装 calico】 - 安装 calico 【kubectl apply -f calico.yaml】
- 安装 calico 之后等他所有的 Pod 运行成功后 kube join 加入集群
- 查看集群【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,表示正常,最后一列是访问的地址。
更多推荐
所有评论(0)