这里交代一下当前使用的环境和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)
 
 
 
             
           
             
                         
             
            
评论区