記一次k8s單機部署
目錄
- [環境]
- [基本安裝]
- [k8s集群初始化]
- [安裝過程中遇到的問題]
- [安裝完成后的配置]
- [配置tomcat RC]
- [配置tomcat service]
- [查看戰果]
- [總結]
版本記錄
編號 | 時間 | 備注 |
---|---|---|
v1.0.0 | 2019.02.21 | 文章創建 |
v1.0.1 | 2019.03.18 | 目錄整改 #基本安裝 (補全缺失內容) |
開始
在開始之前,說一下本次記錄的目的
部署kubernetes單機集群
在理解k8s之前,先不管啥情況,把東西跑起來,與我最熟悉的東西關聯起來,這樣我個人覺得有助于各種理解,至少比上來接觸一堆“奇奇怪怪的概念”要強。
// todo docker 詳細文章(待完成。。。)
// todo k8s 其他相關內容(待完成。。。)
// todo 概念還是要懂的,回頭在補上 (待完成。。。)
環境
基本配置
內容 | 參數 |
---|---|
操作系統 | centos7 |
機器環境 | VMware虛擬機 |
部署目標 | tomcat任意版本 |
虛擬機配置
內容 | 參數 |
---|---|
網卡模式 | NAT |
CPU核心數 | 2 |
內存 | 2G |
基本安裝
安裝docker
// 安裝docker
$ yum install -y docker-ce
// 開機啟動 && 啟動服務
$ systemctl enable docker && systemctl start docker
安裝必要命令
# 在/etc/yum.repos.d 下創建k8s.repos, 并添加如下內容
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
// 安裝
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
拉取鏡像
google 鏡像并不在docker庫中,因此要防止墻的問題,需要找代替鏡像
// 查看kubeadm鏡像
$ kubeadm config images list
// 結果
k8s.gcr.io/kube-apiserver:v1.13.3
k8s.gcr.io/kube-controller-manager:v1.13.3
k8s.gcr.io/kube-scheduler:v1.13.3
k8s.gcr.io/kube-proxy:v1.13.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6
// 執行如下腳本(沒有翻墻的同學只能通過阿里云鏡像或者其他鏡像)
$ for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
// 開機啟動 && 啟動服務
$ systemctl enable kubelet && systemctl start kubelet
k8s集群初始化
開通必要端口號 防止不必要的問題出現
// 6443
firewall-cmd --zone=public --add-port=6443/tcp --permanent && firewall-cmd --reload
// 10250
firewall-cmd --zone=public --add-port=10250/tcp --permanent && firewall-cmd --reload
// 安裝命令
$ kubeadm init
安裝過程中遇到的問題
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
// 解決:
// 虛擬機修改配置
image.png
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
// 解決:
// 編輯配置
$ vi /etc/sysctl.conf
// 添加如下內容
net.bridge.bridge-nf-call-iptables = 1
[ERROR Swap]: running with swap on is not supported. Please disable swap
// 解決:
// 禁用swap功能
$ swapoff -a
// 修改配置
$ vi /etc/fstab
# 注釋如下內容
# k8s need disabled
# /dev/mapper/centos-swap swap swap defaults 0 0
安裝成功
Your Kubernetes master has initialized successfully!
安裝完成后的配置
// 安裝成功后根據提示配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
// master 參與工作(單機模式必備)
kubectl taint nodes --all node-role.kubernetes.io/master-
這邊有一個BUG遇到,實際服務器可能不存在,但是虛擬機使用NAT模式,并且網卡配置為dhcp模式,動態獲取ip
導致一些里問題
eg:coredns 啟動失敗
eg:kube-apiserver-localhost.localdomain 啟動失敗
解決改為靜態配置
BOOTPROTO=static
// ...省略...
# ip 為自己實際環境ip
IPADDR=192.168.228.128
GATEWAY=192.168.228.2
NETMASK=255.255.255.0
# DNS酌情處理但是必須要加
DNS1=8.8.8.8
DNS2=114.114.114.114
查看k8s集群情況(現在只有system pod)
$ kubectl get pods --all-namespaces
// 結果如下
kube-system coredns-86c58d9df4-48pxx 1/1 Running 0 6m10s
kube-system coredns-86c58d9df4-wdlmr 1/1 Running 0 6m10s
kube-system etcd-localhost.localdomain 1/1 Running 0 5m22s
kube-system kube-apiserver-localhost.localdomain 1/1 Running 0 5m18s
kube-system kube-controller-manager-localhost.localdomain 1/1 Running 0 5m4s
kube-system kube-proxy-56m56 1/1 Running 0 6m10s
kube-system kube-scheduler-localhost.localdomain 1/1 Running 0 5m18s
kube-system weave-net-585s5 2/2 Running 0 60s
開啟單機模式
$kubectl taint nodes --all node-role.kubernetes.io/master-
查看master節點情況
不要慌,這里
NotReady
完全正常
安裝網卡插件后,查詢即可變為Ready
$ kubectl get nodes
// 結果
localhost.localdomain NotReady master 144m v1.13.3
安裝網絡插件
// 這邊有很多選擇,本次使用`weave`
// 配置地址 https://kubernetes.io/docs/concepts/cluster-administration/addons/
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
配置tomcat RC
配置docker鏡像
// 查看所需要鏡像
docker search tomcat
// 下載tag為tomcat的images(默認版本為lasted)
docker pull tomcat
replicas: 1
pod實例個數為1
image: tomcat
docker鏡像
name: tomcat-demo
rc名稱
spec:template:
當運行實例個數小于replicas時候,rc會根據spec:template: 自動生成對應個數pod
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat-demo
spec:
replicas: 1
selector:
app: tomcat-demo
template:
metadata:
labels:
app: tomcat-demo
spec:
containers:
- name: tomcat-demo
image: tomcat
ports:
- containerPort: 8080
運行配置并查看結果
// 運行yaml
$ kubectl create -f tomcat-demo-rc.yaml
// 結果如下
tomcat-demo NodePort 10.105.57.5 <none> 8080:30001/TCP 14s
配置tomcat service
nodePort: 30001
映射端口8080:30001
name: tomcat-demo
服務名
tomcat-demo-svc.yaml
配置文件內容
apiVersion: v1
kind: Service
metadata:
name: tomcat-demo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: tomcat-demo
運行配置并查看結果
// 運行yaml
$ kubectl create -f tomcat-demo-svc.yaml
// 結果如下
tomcat-demo NodePort 10.105.57.5 <none> 8080:30001/TCP 14s
注意
svc與rc文件可以寫在同一個yaml中
開通端口號
$ firewall-cmd --zone=public --add-port=30001/tcp --permanent && firewall-cmd --reload
查看戰果
瀏覽器中查看結果 http://${ip地址}:30001/
image.png
總結
安裝過生中遇到不少坑,但是都都克服了,最后加入tomcat環節我覺得很有必要,作為初學者,很多文章,都在講“k8s集群”, 各種集群部署文章,跟著流程安裝了一圈,對錯與否都模棱兩可,還是需要一個“可視化的結果”