如何在智能告警平台CA触发测试告警
838
2022-10-26
kubernetes-36:阿里云ecs上使用kubeadm创建6节点kubernetes集群
k8s已经如此成熟,为什么还要自建/自搭?
答:
dev,test环境成本低,成本不仅仅是指的money;还有体系成本,这种方式可以全员参与/学习。发挥新技术/新体系的最大可能,将新技术/新体系最终赋能到整个公司,只有这样才算真的落地。
而且先期在dev,test随意踩坑,踩的越多越有利。
同时,我在每次部署集群时,都会遇到一些新问题(这和我总部署最新版本也有关系),同时也会有意识的使用之前没用过的方式去主动踩坑,通过这种实操方式反过来加深对k8s体系方方面面的理解。
普通公司生产环境肯定要用云平台的,这是显然的。
吐槽:可惜这种工作方式在国内被玩坏了。
友情提示:在大厂、卷厂的别这么玩,活不了几天的,原因上不得台面自行领会。还有一类极端,那种大老板/大领导喜欢直接做到一线码农旁边指挥写代码的(鄙人之前有幸在两家公司遇到),嗯,不仅不要这么玩,你赶快跑。
目录:
(1).机器准备
(2).前置准备
(3).节点做免密
(4).安装harbor镜像仓库
(5).安装kubernetes
(6).初始化k8s
(7).安装网络
(8).安装另外两个master节点
(9).安装三个work节点
(10).补充
(1).机器准备
3台2c4g的master node,3台8c32g的work node。
(2).前置准备
1.我们需要禁用 swap。
# 不关闭swap初始化会报错,有办法跳过,但是建议还是关闭
swapoff -a
2.关闭selinux
setenforce 0
sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3.安装docker:
移除老版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
设置资源库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
查看docker版本:
yum list docker-ce --showduplicates | sort -r
然后可以直接装docker:
yum install -y docker-ce-20.10.7-3.el7.x86_64
sudo systemctl start docker
(3).节点做免密
在scp发起的机器执行命令生成公私钥:
ssh-keygen
在~/.ssh目录下生成两个文件(id_rsa id_rsa.pub)文件,再把id_rsa.pub文件内容放到scp传输目标机的对应用户下的.ssh目录的authorized_keys里:
ssh-rsa xxx root@jenkins
注意:authorized_keys的权限是600。
(4).安装harbor镜像仓库
原因:阿里云ECS不通国外,需要通过私有仓库拉取http://k8s.gcr.io等镜像。
使用docker构建私有镜像仓库即可。
k8s的各个node配置harbor仓库相关:
配置1修改(每个node都要做):
vim /usr/lib/systemd/system/docker.service
修改配置文件,ExecStart之后添加--insecure-registry http://harbor仓库ip
docker login harbor-ip
配置2修改(每个node都要做):
/etc/docker/daemon.json
docker默认443拉image,需要配置成http的方式:
重新load配置:systemctl daemon-reload
重启docker:systemctl restart docker
在harbor上新建一个项目:kubernetes,k8s基本组件(需要翻墙)做本地化通过docker push的时候作为tag的一部分推到这个项目下。
(5).安装kubernetes
/etc/yum.repos.d/kubernetes.repo文件增加内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
yum clean all
yum -y makecache
yum list kubelet --showduplicates | sort -r
yum install -y kubelet-1.21.2-0 kubeadm-1.21.2-0 kubectl-1.21.2-0
systemctl enable kubelet && systemctl start kubelet
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source ~/.bash_profile
(6).初始化k8s
在运行 kubeadm init 之前可以先执行来测试与 gcr.io 的连接 :
kubeadm config images pull --image-repository=harbor私有仓库IP/kubernetes
kubeadm config images pull尝试是否可以拉取镜像,由于国内访问"k8s.gcr.io", "gcr.io", "quay.io" 有困难,这里采用自建docker register的方式。
肯定是拉不下来的。
先通过命令查看各个组件的具体版本:
kubeadm config images list
写个脚本完成k8s基本镜像的下载&tag&推送到我们的私有镜像仓库。
xxx要替换成你的harbor地址。
[root@dev-k8s-master001 ~]# cat dl-k8s-harbor.sh
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull coredns/coredns:1.8.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.2 Xxx/kubernetes/kube-apiserver:v1.21.2-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.2 Xxx/kubernetes/kube-controller-manager:v1.21.2-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.2 Xxx/kubernetes/kube-scheduler:v1.21.2-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.2 Xxx/kubernetes/kube-proxy:v1.21.2-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1 Xxx/kubernetes/pause:3.4.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 Xxx/kubernetes/etcd:3.4.13-0
docker tag coredns/coredns:1.8.0 Xxx/kubernetes/coredns:v1.8.0
docker push Xxx/kubernetes/kube-apiserver:v1.21.2-0
docker push Xxx/kubernetes/kube-controller-manager:v1.21.2-0
docker push Xxx/kubernetes/kube-scheduler:v1.21.2-0
docker push Xxx/kubernetes/kube-proxy:v1.21.2-0
docker push Xxx/kubernetes/pause:3.4.1
docker push Xxx/kubernetes/etcd:3.4.13-0
docker push Xxx/kubernetes/coredns:v1.8.0
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.21.2-0 --image-repository=Xxx/kubernetes
等一会儿后根据提示操作:
To start using your cluster, you need to run the following as a regular user:
(如果想启动你的集群,需要执行):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
可以改为:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
(其他节点加入这个集群需要执行):
kubeadm join 172.31.41.180:6443 --token egbpio.kt24aljvxxtp0uk2 \
--discovery-token-ca-cert-hash sha256:a2dd5e0de33a435cfdeedb4f935a3b6c1931a49fab8fee77925d0f6f9c0e298e
我们查看一下集群:kubectl get nodes
因为没有安装网络,所以不可用。
kubectl get pods看到的pod也是不可用状态。
(7).安装网络
# 官网链接
# https://v1-20.docs.kubernetes.io/zh/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model
# 此处选择简单的flannel,如果有更高性能要求可以选择calico
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 执行完后验证:
kubectl get pods -A
kubectl get nodes
至此,这个节点安装完成。
(8).安装另外两个master节点
重复(1)到(3)的步骤,然后将master001的证书拷贝到其他master节点:
USER=root
CONTROL_PLANE_IPS="node-02 node-03"
for host in ${CONTROL_PLANE_IPS}; do
ssh "${USER}"@$host "mkdir -p /etc/kubernetes/pki/etcd"
scp /etc/kubernetes/pki/ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* "${USER}"@$host:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf "${USER}"@$host:/etc/kubernetes/
done
上边的同步脚本将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效
source ~/.bash_profile
然后使用(4)中的join命令,将master加入集群。
kubeadm join 172.31.41.180:6443 --token egbpio.kt24aljvxxtp0uk2 \
--discovery-token-ca-cert-hash sha256:a2dd5e0de33a435cfdeedb4f935a3b6c1931a49fab8fee77925d0f6f9c0e298e --control-plane
--control-plane表示加入的这个节点是master。
执行报错:
查看一下 kubeadm-config.yaml
kubectl -n kube-system get cm kubeadm-config -o yaml
发现controlPlaneEndpoint的值是空的.
走,去改他.
kubectl -n kube-system edit cm kubeadm-config
编辑yaml文件,要设置controlPlaneEndpoint配置,应将kubeadm与--config标志一起使用。查看here作为配置文件示例:
再次执行join命令,成功:然后顺次执行红色框中命令。
这个时候我们在执行:kubectl get pods -A
可以看到两个master都有集群管理pod。
(9).安装三个work节点
重复(1)到(3)的步骤,然后将master001的证书拷贝到其他master节点:
USER=root
CONTROL_PLANE_IPS="node-02 node-03"
for host in ${CONTROL_PLANE_IPS}; do
ssh "${USER}"@$host "mkdir -p /etc/kubernetes/pki/etcd"
scp /etc/kubernetes/pki/ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* "${USER}"@$host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* "${USER}"@$host:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf "${USER}"@$host:/etc/kubernetes/
done
上边的同步脚本将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效
source ~/.bash_profile
然后使用(4)中的join命令,将master加入集群。
kubeadm join 172.31.41.180:6443 --token egbpio.kt24aljvxxtp0uk2 \
--discovery-token-ca-cert-hash sha256:a2dd5e0de33a435cfdeedb4f935a3b6c1931a49fab8fee77925d0f6f9c0e298e
可能会报错:
将ca.crt做个backup再次执行即可:
增加完三个work后,在查看pods和nodes:
(10).补充
1.如果join命令忘记了,可以通过如下命令获取
kubeadm token create --print-join-command
2.k8s一个小瑕疵
版本检查和实际安装版本不一致:
发表评论
暂时没有评论,来抢沙发吧~