Kubernetes 1.3.1 快速單機部署

    Kubernetes發展到今天, 在官網上已經有非常多的成熟部署方案, 但是由於牆的原因, 最簡單的MiniKube都無法進行, 參考了以下兩篇文章後, 終於安裝成功.

    k8s-1.13版本測試環境搭建

    Kubernetes 最新版本安裝過程和注意事項


    本文假設讀者對Kubernetes有基本的認識, 只想知道如何快速的部署Kubernetes. 其實我參考的兩篇文章對操作步驟有詳細解釋, 讀者可以盡情參考, 更詳實的內容請參考 Kubernetes中文社區Kubernetes官網.

 

0. 環境準備
CentOS 7 1810 最小安裝, 虛擬機至少 2 CPU, 2GB 內存, 硬盤20G就夠了. 本示例中, 這個虛擬機的IP地址是192.168.1.41

 

下面大部分操作需要root權限, 請直接su使用root用戶

1. 系統設置

關閉SELinux, 簡單起見, 直接關閉防火牆

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
systemctl disable firewalld --now

禁用swap

swapoff -a
vi /etc/fstab  #永久禁掉swap分區,打開如下文件註釋掉swap那一行

系統參數與內核模塊

# 修改內核參數
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

# 加載br_netfilter內核模塊
modprobe br_netfilter
lsmod | grep br_netfilter

 

2. 安裝Docker CE

Docker 沒有被牆, 直接按照官方教程進行即可

yum install -y yum-utils device-mapper-persistent-data lvm2 && \
yum-config-manager -y --add-repo https://download.docker.com/linux/centos/docker-ce.repo && \
yum install -y docker-ce-18.06.3.ce-3.el7 docker-ce-cli-18.06.3.ce-3.el7 containerd.io

使用中國區鏡像

mkdir /etc/docker && cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}
EOF

啓動並設爲開機啓動

systemctl enable docker --now
docker run hello-world

 

3. 使用阿里雲鏡像安裝Kubernetes組件

增加阿里雲鏡像

cat <<EOF > /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
EOF

安裝

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now

 

4. 提前下載所需鏡像

由於k8s.gcr.io被牆,我們從mirrorgooglecontainers下載image,然後打個tag來繞過網絡限制

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.3 && \
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.3 && \
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.3 && \
docker pull mirrorgooglecontainers/kube-proxy:v1.13.3 && \
docker pull mirrorgooglecontainers/pause:3.1 && \
docker pull mirrorgooglecontainers/etcd:3.2.24 && \
docker pull coredns/coredns:1.2.6 && \
docker tag mirrorgooglecontainers/kube-apiserver:v1.13.3 k8s.gcr.io/kube-apiserver:v1.13.3 && \
docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.3 k8s.gcr.io/kube-controller-manager:v1.13.3 && \
docker tag mirrorgooglecontainers/kube-scheduler:v1.13.3 k8s.gcr.io/kube-scheduler:v1.13.3 && \
docker tag mirrorgooglecontainers/kube-proxy:v1.13.3 k8s.gcr.io/kube-proxy:v1.13.3 && \
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1 && \
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24 && \
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6

 

5. 初始化Kubernetes

這裏一定要指定Kubernetes的版本, <<k8s-1.13版本測試環境搭建>> 就是由於沒有指定版本, 初始化的時候回下載更高版本的proxy鏡像, 由於被牆導致初始化失敗

kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=10.100.0.0/16

這裏需要花大概一兩分鐘

按照輸出的提示, 需要拷貝config文件到 普通用戶 的home目錄, 從現在開始需要退出root

mkdir -p $HOME/.kube && \
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && \
sudo chown $(id -u):$(id -g) $HOME/.kube/config

按照提示, 還需要初始化虛擬網絡, 由於flannel的鏡像被牆, 這裏使用weave

kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')

 

6. 默認情況下, master是不能跑業務pod的, 下面的命令可以解除這個限制

kubectl taint node kube-master node-role.kubernetes.io/master-

 

7. 建立Deployment

建立nginx-deploy.yaml, 輸入

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mynginx
  template:
    metadata:
      name: mynginx
      labels:
        app: mynginx
    spec:
      containers:
      - name: mynginx
        image: nginx
        ports:
        - containerPort: 80

以普通用戶執行

 kubectl apply -f nginx-deploy.yaml

Kube需要花一些時間下載nginx鏡像, 並創建pod

通過kubectl get pod -o wide 可以查看部署到哪個內部IP

NAME                      READY   STATUS    RESTARTS   AGE   IP          NODE                   NOMINATED NODE   READINESS GATES
mynginx-f54f8d796-dg4dc   1/1     Running   0          94s   10.32.0.4   centos42.localdomain   <none>           <none>

這時候curl 10.32.0.4 可以得到nginx首頁的html

 

8. 建立服務並讓外部可以訪問

新建  nginx-service.yaml

kind: Service
apiVersion: v1
metadata:
  name: nginx-service
spec:
  selector:
    app: mynginx
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30010
  type: NodePort

發佈服務

kubectl apply -f nginx-service.yaml

通過kubectl get service可以看到服務

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        8h
nginx-service   NodePort    10.104.176.53   <none>        80:30010/TCP   27s

這時候可以通過 curl 10.104.176.53:80 在內部訪問nginx

外部通過curl 192.168.1.41:30010 得到nginx主頁的html

 

 

 

 

End

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章