Jimmy小站
小明也有大梦想 — 蒋明/铭Docker自动化部署集群搭建
2021-04-18 / 未分类 / 4554 次围观 / 0 次吐槽项目环境
- docker master *1
- docker slave *2
- 项目运行中间件环境*1 包含:
RabbitMQ
MySQL
nacos
Redis
miniIO oss - 持续集成环境*1,可选
jenkins 不是必须
harbor 镜像仓库 可使用阿里云私有镜像库代替
gitlab 源码库 可使用github代替
##
关闭不必要的服务
// 关闭防火墙
sudo ufw disable
// 关闭swap
sudo swapoff -a
sudo vim /etc/fstab
注释掉有swap的行,避免开机自动启动
//关闭selinux
sudo apt install -y selinux-utils
setenforce 0
shutdown -r now // 重启
sudo getenforce //检查是否关闭
修改成国内源
ubuntu
sudo vim /etc/apt/sources.list
改成
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://y8t1dvc7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
k8s
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
设置自动启动
sudo systemctl enable kubelet && systemctl start kubelet
配置
vim /etc/host
把主机名和IP地址绑定,方便通过主机名能相互访问
生成配置
kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
检查配置
kubeadm config images list --config kubeadm.conf
拉取依赖镜像
kubeadm config images pull --config ./kubeadm.conf
尝试修改镜像源imageRepository和master的IPadvertiseAddress和podSubnet
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.31.20
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: jimmy-virtualbox
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
完成之后 初始化
sudo kubeadm init --config ./kubeadm.conf
或者:(推荐前者)
#修改IP地址为master节点的IP地址并配置pod地址
sudo kubeadm init \
--apiserver-advertise-address=192.168.31.20 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
运行结果
Your Kubernetes control-plane has initialized successfully!
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
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 192.168.31.20:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:2a074dcbc1bd05675cc7f7b25e09b883d7243965f87dd3d19c68f70e388e0ac4
下面的命令在master和slave上都要执行,有一个问题,slave刚开始会提示文件不存在。需要从master拷贝过来,貌似等一会会自动同步。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
systemctl enable kubelet
systemctl start kubelet
结果
jimmy@jimmy-VirtualBox:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
jimmy-virtualbox NotReady master 7m43s v1.18.6
现在master启动了,但是是notready 状态。需要配置master和node之间的网络环境 flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后
sudo kubectl apply -f kube-flannel.yml
kube get nodes
结果
jimmy@jimmy-VirtualBox:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
jimmy-virtualbox Ready master 21m v1.18.6
If your cluster was setup to utilize IPVS, run ipvsadm –clear (or similar)
to reset your system’s IPVS tables.
其他
如果不小心在slave安装了kubeadm 可以回撤
sudo kubeadmn reset
从节点
[root@k8snode1 kubernetes]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
检查pod状态
sudo kubectl describe pod mysql
报错:open /run/flannel/subnet.env: no such file or directory
在master和slave机器分别新增文件
sudo vim /run/flannel/subnet.env
内容如下
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
强行删除,让容器重新启动pod
kubectl delete pod mysql-fh2vm –grace-period=0 –force
再次检查pod状态
yaml部署应用
sudo vim mysql.yml 内容如下
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1 #Pod副本的数量
selector:
app: mysql #标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #Pod副本拥有的标签,对应RC的Selector
spec:
containers: #Pod内容器的定义部分
- name: mysql #容器的名称
image: hub.c.163.com/library/mysql #容器对应的Docker image
ports:
- containerPort: 3306 #容器应用监听的端口号
env: #注入容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
sudo kubectl create -f mysql-rc.yml
推荐您阅读更多有关于“”的文章
- OTS 向量检索
额 本文暂时没人评论 来添加一个吧
发表评论