目標是搭建一個可測試的k8s環境,使用的工具 kubeadm, 最終一個master節點(非高可用),2個node節點。
環境以及版本
- Centos7.3
- kubeadm 1.11.1
- kubelet 1.11.1
- kubectl 1.11.1
- docker-ce-18.06
說明 kubeadm預設的etcd是本地的,所以這裡使用的是本地 etcd,而不是kubeadm中的
name | ip | role |
---|---|---|
master1 | 10.0.12.13 | master |
node1 | 10.0.12.10 | node |
node2 | 10.0.12.8 | node |
基礎環境
三臺主機都需要安裝的有docker, kubeadm, kubelet 都是採用 yum 來安裝,需要關閉swap,以及防火牆,禁用SELinux。
禁用 SELinux
sudo setenforce 0
關閉swap
sudo swapoff -a
vim /etc/fstab #swap一行註釋掉
安裝 docker
sudo yum install -y docker
設定開機啟動和啟動服務
sudo systemctl enable docker
sudo systemctl start docker
看下docker的版本, 至少高於 1.12
版本
sudo docker version
安裝 Kubernetes 包
配置 yum 源,並安裝 kubeadm, kubectl, and kubelet
新增 k8s 源
sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF'
如果無法訪問google,那麼採用國內源
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
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
EOF
安裝 k8s 需要的元件
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
kubeadm v1.11 之前需要先啟動 sudo systemctl start kubelet
服務,但是我在安裝v1.11 發現並不需要先啟動 kubelet服務,後面的 kubeadm init
彙總會自動啟動
k8s 網路需要使用 網路轉發,所以需要設定
sudo bash -c 'cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF'
應用設定
sudo sysctl --system
關閉防火牆
只是為了方面,不是可選,測試環境方面
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl status firewalld
Master 操作
由於採用外部 etcd,所以要在 master 節點安裝 etcd服務,這裡也是etcd是單節點
安裝etcd
不管是etcd 叢集還是單機,或者是 http, https都可以,只要在 kubeadm 中配置好就行。 這部分先略過,大家可以找下 etcd的安裝手冊。
實驗中是單機 etcd,然後監聽地址為 https://10.0.12.13:2379
kubeadm
kubeadm配置 kubeadm.yaml
(新建,任意目錄下)
---
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
kubernetesVersion: v1.11.1
apiServerCertSANs:
- 10.0.12.13
networking:
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
api:
advertiseAddress: 10.0.12.13
etcd:
endpoints:
- https://10.0.12.13:2379
caFile: /etc/etcd/ssl/etcd-ca.pem
certFile: /etc/etcd/ssl/etcd.pem
keyFile: /etc/etcd/ssl/etcd-key.pem
kubeadm的參考文件地址 可以根據需要自己更改
kubeadm 安裝 k8s
下面是 kubeadm 表演的時間了
sudo kubeadm init --config kubeadm.yaml
# 所有階段會列印出來
....
Your Kubernetes master 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/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 10.0.12.13:6443 --token 4b3m3i.hrzetk4qb5uh74e4 --discovery-token-ca-cert-hash sha256:357b0fec02af903e66022019cea82ff3a95264479cb5d222ea8e938df2db3d20
給出一些下面要做的步驟,配置 kubectl
, 配置網路元件,以及 worker node 加入的命令。
下面就是跟著提示配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
檢視狀態
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 NotReady master 5m v1.11.1
可以看到 status 為 NotReady
, 因為網路元件還沒有配置, 下面配置 flannel。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
再來看狀態
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-78fcdf6894-4744c 1/1 Running 0 5m
kube-system coredns-78fcdf6894-jbvhd 1/1 Running 0 5m
kube-system kube-apiserver-master1 1/1 Running 0 5m
kube-system kube-controller-manager-master1 1/1 Running 0 5m
kube-system kube-flannel-ds-amd64-kp7cr 1/1 Running 0 11s
kube-system kube-proxy-6778v 1/1 Running 0 5m
kube-system kube-scheduler-master1 1/1 Running 0 5m
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 6m v1.11.1
]$ kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
master 節點的配置基本完成了。
Node 配置
就是執行之前 init 最後打出的那個命令
sudo kubeadm join 10.0.12.13:6443 --token 4b3m3i.hrzetk4qb5uh74e4 --discovery-token-ca-cert-hash sha256:357b0fec02af903e66022019cea82ff3a95264479cb5d222ea8e938df2db3d20
2個node操作完之後,再來 master 節點看看
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 7m v1.11.1
node1 Ready <none> 18s v1.11.1
node2 Ready <none> 10s v1.11.1
用一個簡單pod測試下
kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
# 正常執行,再看看排程情況
$ kubectl get pod --show-all -o wide
NAME READY STATUS RESTARTS AGE IP NODE
busybox 0/1 Completed 0 48s 10.244.1.2 node1
其他
檢視 kubeadm 的配置
sudo kubeadm config view
写评论
很抱歉,必須登入網站才能發佈留言。