这里交代一下当前使用的环境和Kubernetes的版本,另外使用的Kuboard的版本信息。
如果你和我的环境都是一样的,可以直接使用我这里的代码搭建K8S。
但是如果有差异,还是去https://kuboard.cn/看看吧。
你学习Kubernetes的时候可以使用这种方式,快速搭建K8S。
但是如果你是准备将Kubernetes在项目中运行,最好还是使用二进制的安装方式
。
后面我也会再使用二进制的文件,搭建一个完整的Kubernetes集群,并集群上面运行DjangoWeb的项目。
版本信息
- CentOS 7.8
- Docker 19.03.8
- Kubernetes v1.18.x
- calico 3.13.1
- nginx-ingress 1.5.5
CentOS
总是使用Ubuntu和Debian来做Server/Desktop,这次突然用CentOS,对我来说还真是…有点新奇
没有apt-get,yum update就可以直接更新等等。
下面就来看看CentOS初始化需要做哪些操作吧:
网络配置
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=on ==> ONBOOT=yes -- 修改
service network restart -- 重启network
yum update -- 更新
yum install net-tools -- 安装net-tools
修改静态IP
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static -- 这里修改为 static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=6efa4e7b-8bae-4998-a044-e7bc127bac2d
DEVICE=ens33
ONBOOT=yes
IPADDR=111.111.111.151 -- 静态IP
GATEWAY=111.111.111.2 -- 默认网关
NETMASK=255.255.255.0 -- 子网掩码
DNS1=111.111.111.2 -- DNS 配置
DNS2=8.8.8.8 -- 谷歌地址
NM_CONTROLLED=no
- vi /etc/resolv.conf
nameserver 111.111.111.2
nameserver 8.8.8.8
- vi /etc/sysconfig/network-scripts/route-ens33
192.168.247.0 via 192.168.247.2
0.0.0.0 via 192.168.247.2
- vi /etc/sysconfig/static-routes
any net 192.168.247.0 netmask 255.255.255.0 gw 192.168.247.2
any net 0.0.0.0 netmask 0.0.0.0 gw 192.168.247.2
- service network restart
Kubernetes单节点
安装docker及kubelet
-- 在 master 节点和 worker 节点都要执行
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.18.x/install_kubelet.sh | sh -s 1.18.4
初始化master节点
只在 master 节点执行
export MASTER_IP=111.111.111.151
export APISERVER_NAME=apiserver.demo
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.18.x/init_master.sh | sh -s 1.18.4
-- 检查 master 初始化结果
watch kubectl get pod -n kube-system -o wide
kubectl get nodes -o wide
初始化worker节点
- 在master节点执行
-- 这里返回的是加入K8S集群的命令
kubeadm token create --print-join-command
- 只在 worker 节点执行
export MASTER_IP=111.111.111.151
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
- 在worker节点上执行,加入K8S集群的命令
检查初始化结果
kubectl get nodes -o wide
安装 Ingress Controller
-- 只在 master 节点执行
kubectl apply -f https://kuboard.cn/install-script/v1.18.x/nginx-ingress.yaml
Kubernetes高可用
初始化master-1节点
- 在 master 节点和 worker 节点都要执行
curl -sSL https://kuboard.cn/install-script/v1.16.2/install_kubelet.sh | sh
- 只在第一个 master 节点执行
export APISERVER_NAME=apiserver.demo -- 替换 apiserver.demo 为 您想要的 dnsName
export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.16.2/init_master.sh | sh
- 运行输出:
- 第一个
kubeadm join apiserver.k8s:6443 --token...
复制到master
节点上运行 - 第二个
kubeadm join apiserver.k8s:6443 --token...
复制到worker
节点上运行
- 第一个
检查master初始化结果
-- 只在第一个 master 节点执行
-- 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
-- 查看 master 节点初始化结果
kubectl get nodes
初始化master-2、master-3
- 只在第二、三个 master 节点 demo-master-b-1 和 demo-master-b-2 执行
export APISERVER_IP=x.x.x.x
export APISERVER_NAME=apiserver.demo
echo "${APISERVER_IP} ${APISERVER_NAME}" >> /etc/hosts
- 加入集群
-- 使用master-1上输出的join命令
kubeadm join apiserver.demo:6443 --token ...
-- 在master-1上检查结果
kubectl get nodes
初始化worker节点
-- 只在 worker 节点执行
export MASTER_IP=x.x.x.x
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
-- 使用master-1上输出的join命令
kubeadm join apiserver.demo:6443 --token ...
-- 在master-1上检查结果
kubectl get nodes
移除 worker 节点
在准备移除的 worker 节点上执行:kubeadm reset
在第一个 master-1上执行:kubectl delete node worker_name
安装Ingress Controller
-- 只在第一个 master 节点 demo-master-a-1 上执行
kubectl apply -f https://kuboard.cn/install-script/v1.16.2/nginx-ingress.yaml
Load Balbancer
vi demo1.deploy.yml
apiVersion: v1
kind: Service
metadata:
name: demo1
namespace: default
labels:
app: demo1
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
app: demo1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo1-deployment
namespace: default
labels:
app: demo1
spec:
replicas: 2
selector:
matchLabels:
app: demo1
template:
metadata:
labels:
app: demo1
spec:
containers:
- name: demo1
image: mritd/demo
ports:
- name: http
containerPort: 80
protocol: TCP
-- 部署
kubectl apply -f demo1.deploy.yml
-- 查看
kubectl get svc,pod -n default
Kuboard
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
-- 获取token
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
评论区