centos安裝kubernetes,calico,nfs
kubernetes+calico+nfs環境部署
原作者 張偉@天雲軟體,轉載請註明出處
主機說明:
- 系統版本:centos7.2,Linux kernel 3.10.0及以上版本。
- 系統規格:>=4CPU,>=4GRAM,120G磁碟(使用lvm管理,可動態擴容)。
主機規劃:
角色 | 主機名 | IP | 說明 |
---|---|---|---|
master,etcd | master | 172.16.10.2 | etcd,kubernetes(apiserver,scheduler,controller-manager),calico |
minion | minion1 | 172.16.10.3 | kubernetes(kubelet,proxy),docker,calico |
minion | minion2 | 172.16.10.4 | kubernetes(kubelet,proxy),docker,calico |
registry | registry | 172.16.10.5 | registry |
nfsserver | nfsserver | 172.16.10.6 | nfs-server |
軟體:
- etcd v2.2.5
- docker v1.9.1
- kubernetes二進位制包(安裝完成後可替換二進位制包進行升級):
- kubectl v1.2.0
- kubelet v1.2.0
- kube-proxy v1.2.0
- kube-scheduler v1.2.0
- kube-controller-manager v1.2.0
- kube-apiserver v1.2.0
- registry.access.redhat.com/rhel7/pod-infrastructure:latest(映象)
- calico:
- calicoctl v0.18.0
- calico/node:v0.18.0 (映象)
- calico v1.1.0
- calico-ipam v1.1.0
- calico/k8s-policy-agent:v0.1.2 (映象)
- policy
- easyrsa3
安裝kubernetes叢集
1.準備安裝源
建議使用阿里源替換系統自帶的源
配置kubernetes安裝源
關閉selinux: setenforce 0
2.安裝kubernetes master節點
yum install kubernetes etcd -y 安裝kubernetes的所有服務。
1)配置crt通訊證書
1.1) 配置apiserver crt證書:
下載easyrsa3:
curl -L -O https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
tar xzf easy-rsa.tar.gz
cd easy-rsa-master/easyrsa3
./easyrsa init-pki
建立CA:
./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass (如果要使用預設的service訪問kubernetes叢集,使用--req-cn=*)
生成服務使用的cert和key:
./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full kubernetes-master nopass(如果要使用預設的service訪問kubernetes叢集,要在IP後邊配置service的IP:IP:${MASTER_IP},IP:${SERVICE_IP})*
mkdir -p /srv/kubernetes
cp pki/ca.crt /srv/kubernetes/
cp pki/issued/kubernetes-master.crt /srv/kubernetes/server.cert
cp pki/issued/kubernetes-master.key /srv/kubernetes/server.key
1.2)配置ServiceAccount:
openssl genrsa -out /srv/kubernetes/serviceaccount.key 2048
chmod +x /srv/kubernetes/*
2)配置etcd服務
vi /etc/etcd/etcd.conf
修改etcd監聽的網絡卡和埠,使服務能夠在叢集內訪問。
systemctl enable etcd
systemctl restart etcd
3)配置apiserver
vi /etc/kubernetes/config
將KUBE_MASTER的值修改為正確的IP地址。
# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="--logtostderr=true"
# journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0"
# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=true"
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://master:8080"
vi /etc/kubernetes/apiserver
修改apiserver監聽的網絡卡和埠,並配置使用的etcd叢集。注意增加apiserver的證書設定。
# The address on the local server to listen to.
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# The port on the local server to listen on.
# KUBE_API_PORT="--port=8080"
KUBE_API_PORT="--insecure-port=8080"
# Port minions listen on
# KUBELET_PORT="--kubelet-port=10250"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://master:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
# Add your own!
KUBE_API_ARGS="--client-ca-file=/srv/kubernetes/ca.crt --tls-cert-file=/srv/kubernetes/server.crt --tls-private-key-file=/srv/kubernetes/server.key --service_account_key_file=/srv/kubernetes/serviceaccount.key"
4)配置controller-manager
vi /etc/kubernetes/controller-manager
增加證書設定
# Add your own!
KUBE_CONTROLLER_MANAGER_ARGS="--root-ca-file=/srv/kubernetes/ca.crt --service_account_private_key_file=/srv/kubernetes/server.key"
5)啟動master上的服務
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES done
3.安裝kubernetes minion節點
yum install kubernetes -y
1)配置kubelet
vi /etc/kubernetes/config
將KUBE_MASTER的值修改為正確的IP地址。
# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="--logtostderr=true"
# journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0"
# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=true"
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://master:8080"
vi /etc/kubernetes/kubelet
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"
# The port for the info server to serve on
# KUBELET_PORT="--port=10250"
# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=${YOUR_HOST_NAME}"
# location of the api-server
KUBELET_API_SERVER="--api-servers=http://master:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container- image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# Add your own!
KUBELET_ARGS=""
2)配置kube-proxy
vi /etc/kuerbnetes/proxy,可以配置proxy模式
# Add your own!
KUBE_PROXY_ARGS=" --proxy-mode=iptables"
3)啟動minon上的服務
for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICESdone
4.檢查kubernetes 叢集狀態
等服務啟動完成後,在master節點上檢查叢集狀況。測試環境上master上也部署了成了minion節點。
[[email protected] ~]# kubectl get nodes
NAME LABELS STATUS AGE
master kubernetes.io/hostname=master Ready 6d
minion1 kubernetes.io/hostname=minion1 Ready 6d
minion2 kubernetes.io/hostname=minion2 Ready 6d
安裝Calico
1.節點安裝calico (使用v0.18.0版本)
wget -o /usr/bin/calicoctl https://github.com/projectcalico/calico-containers/releases/download/v0.18.0/calicoctl
chmod +x /usr/bin/calicoctl
建立檔案/etc/systemd/calico-node,設定etcd叢集服務地址:
[Unit]
Description=calicoctl node
After=docker.service
Requires=docker.service
[Service]
User=root
Environment=ETCD_AUTHORITY=master:4001
PermissionsStartOnly=true
ExecStart=/usr/bin/calicoctl node --detach=false
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
將calico-node配置成開機啟動服務,並啟動。
在環境變數中增加ETCD_AUTHORITY=master:4001的配置
systemctl enable /etc/systemd/calico-node.service
service calico-node restart
將會使用映象calico/node:v0.18.0,啟動服務。
2.在所有minion節點上,安裝calico-cni擴充套件
wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.1.0/calico chmod +x /opt/cni/bin/calico
wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.1.0/calico-ipam
chmod +x /opt/cni/bin/calico-ipam
配置cni網路宣告:
$ cat /etc/cni/net.d/10-calico.conf
{
"name" : "calico-k8s-network",
"type" : "calico",
"etcd_authority" : "master:4001",
"log_level" : "info",
"ipam" : {
"type" : "calico-ipam"
}
}
如果是在阿里雲上部署,需要設定calico使用ipip,用如下命令檢視:
calicoctl pool show --ipv4
如果顯示
+----------------+-------------------+
| IPv4 CIDR | Options |
+----------------+-------------------+
| 192.168.0.0/16 | ipip,nat-outgoing |
+----------------+-------------------+
表示已啟用ipip,否則根據提示刪除ip池,重新新增並使用選項–ipip –nat-outgoing。
檢視預設規則是否正確:
calicoctl profile calico-k8s-network rule show
如果顯示
Inbound rules:
1 allow
Outbound rules:
1 allow
表示預設規則正確。
驗證網路環境是否滿足kubernetes需求:
1) 建立一個rc,副本數量和叢集的minion節點一致。
2) 測試主機到pod通訊:主機 ping 本機PodIp, 主機ping 其它主機PodIp。Pod內部ping宿主機Ip,Pod內部ping其它主機Ip。
3) 測試cluster ip通訊:建立service,後端使用可用的Pod服務。在Pod所在minion,使用serviceIp+port訪問服務。在其它minion,使用serviceIp+port訪問服務。
4) 測試nodePort通訊:使用minion本機IP+nodeport訪問服務。使用其它minion ip+nodeport訪問服務。
如果以上測試全部通過,則網路配置正確,否則需要排查問題。
如果排查後配置全部正確,但是kubermetes網路某些環節不通,可以在所有節點執行:
calicoctl node
命令,重新初始化calico網路的連結。
3.部署policy-agent
使用下面的yaml檔案部署policy-agent,其機制為監聽kubernetes 中pod和namespace的變化,namespace中network policy的配置變化,有policy-agent寫入到calico的etcd儲存中,然後直接由每個節點上的felix轉換為iptables規則。
apiVersion: v1
kind: Namespace
metadata:
name: calico-system
---
apiVersion: v1
kind: ReplicationController
metadata:
name: calico-policy-agent
namespace: calico-system
labels:
version: v0.1.2
projectcalico.org/app: "policy-agent"
spec:
replicas: 2
selector:
version: v0.1.2
projectcalico.org/app: "policy-agent"
template:
metadata:
labels:
version: v0.1.2
projectcalico.org/app: "policy-agent"
spec:
containers:
- name: policyagent
image: 172.16.10.5:5000/calico/k8s-policy-agent:v0.1.2
imagePullPolicy: IfNotPresent
env:
- name: ETCD_ENDPOINTS
value: "http://172.16.10.2:2379"
部署完成後,等待服務啟動。檔案中的env是讓pod使用環境變數方式訪問ETCD,如果kubernetes叢集中安裝了DNS,可以刪掉環境變數的設定,使用dns訪問ETCD服務。
在master節點上,policy用於操作network policy物件實現網路隔離的動態控制。
wget https://github.com/projectcalico/k8s-policy/releases/download/v0.1.1/policy
chmod +x ./policy
4.修改kubernetes配置
設定kube-proxy服務的proxy-mode配置為iptables,修改配置檔案/etc/kubernetes/proxy:
###
# kubernetes proxy config
# default config should be adequate
# Add your own!
KUBE_PROXY_ARGS=" --proxy-mode=iptables"
設定kubelet的network-plugin為cni,修改配置檔案/usr/lib/systemd/system/kubelet.service:
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
--network-plugin-dir=/etc/cni/net.d \
--network-plugin=cni \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBELET_API_SERVER \
$KUBELET_ADDRESS \
$KUBELET_PORT \
$KUBELET_HOSTNAME \
$KUBE_ALLOW_PRIV \
$KUBELET_POD_INFRA_CONTAINER \
$KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=multi-user.target
重啟相關服務:
service kubelet restart
service kube-proxy restart
安裝nfs服務
1.安裝nfs相關服務
yum install nfs-server
yum install nfs
yum install rpcbind nfs-utils
2.新增共享目錄
/share *(rw,insecure,sync,no_subtree_check,no_root_squash)
/mysql *(rw,insecure,sync,no_subtree_check,no_root_squash)
上述共享目錄的配置一定要寫上,否則在使用過程中可能出現Operation not permitted錯誤。
3.所有kubernetes minion節點安裝nfs工具
yum install rpcbind nfs-utils
- 整體測試
常見問題及解決方案
1.kubernetes dns服務異常
首先檢視kubelet是否配置正確,安裝dns需要在所有節點的kubelet啟動引數中增加
--cluster-dns=10.254.0.3 --cluster-domain=cluster.local
引數。
其次檢視dns版本,確定kube2sky和kubernetes api通訊的方式,老版本的(如v9版本),需要在yaml檔案中指定kubernetes apiserver的地址和埠。新版本的(如v11版本),使用kubernetes預設的kubernetes service訪問kubernetes。如果是新版本,請參考 配置crt通訊證書 一節,修改crt證書生成方式。 如果是老版本,確定kubernetes的網路是否配置正確。
2.pv和pvc繫結失敗
pv和pvc匹配要檢查以下幾點:
1) pv和pvc的標籤是否一致。
2) pv和pvc的大小是否滿足要求,pvc的容量要求不能大於pv的容量。
3) pv和pvc的accessModes必須相同。
3.mysql容器使用nfs啟動不了
檢視mysql對應Pod的日誌,如果出現Operation not permitted錯誤,是因為nfs設定的共享目錄許可權不足,在共享目錄設定中增加no_root_squash設定。
4.kubernetes https訪問許可權問題
訪問Pod中服務可能會報以下錯誤:
x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs
這個是因為沒有設定或者設定的證書出錯,參考 配置crt通訊證書 重新生成證書,修改配置即可。
5.guestbook服務寫資料無響應
這個是因為guestbook要使用的angular.min.js需要翻牆才能使用,可以把js檔案下載到本地,重新生成映象。
6.cassandra服務無法訪問kubernetes api
v6版本的cassandra使用的SeedProvider有BUG,使用的預設的服務域名為
kubernetes.default.cluster.local
正確的應該是
kubernetes.default.svc.cluster.local
這個只能通過重新編譯原始碼,打包映象解決。
v7版本的映象因許可權問題cassandra啟動指令碼執行失敗。沒有深入研究解決方法。
v8版本已經解決了上述問題,但是沒有找到可以使用的映象。
7.nslookup解析正常,不能用域名訪問服務
檢視主機的/etc/resolv.conf檔案,如果存在類似記錄則刪除掉:
options timeout:1 attempts:1 rotate
8.問題排查方法
1) kubectl describe pod POD_NAME –namespace=NAME_SPACE檢視Pod的事件及基本資訊。如下載映象失敗等問題都可以從這塊定位出來。
2) kubectl logs POD_NAME –namespace=NAME_SPACE檢視Pod的日誌,定位服務本身的問題,具體問題具體分析。
3) 在Pod內部訪問kubernetes apiserver有兩種方式。
一種是指定apiserver的地址和埠,如果使用這種方式訪問失敗,比如timeout,可以從叢集網路環境入手排查問題。
另一種是使用kubernetes的預設service訪問,這種訪問方式使用的是https,並且依賴於叢集dns服務。如果出現問題,先排查叢集的dns服務是否安裝正確。建立busybox Pod,執行
kubectl exec busybox nslookup kubernetes.default.svc.cluster.local --namespace=kube-system
Server: 10.254.0.3
Address 1: 10.254.0.3
Name: kubernetes.default.svc.cluster.local
Address 1: 10.254.0.1
如果可以正確解析域名說明服務正常。
其次排查叢集crt證書是否配置正確。使用命令:
kubectl exec frontend-0ghx0 ls /var/run/secrets/kubernetes.io/serviceaccount/
檢視Pod內部證書和crt檔案。
9.kubernetes升級
centos源安裝的kubernetes有很多問題,可以使用官方release的版本升級kubernetes。升級方式是下載二進位制包,停止kubernetes服務,用下載的二進位制包替換老的二進位制包,重新啟動服務即可。
相關推薦
centos安裝kubernetes,calico,nfs
kubernetes+calico+nfs環境部署 原作者 張偉@天雲軟體,轉載請註明出處 主機說明: 系統版本:centos7.2,Linux kernel 3.10.0及以上版本。 系統規格:>=4CPU,>=4GRAM,120G磁
centos 安裝完Nginx後,為什麼訪問不了?
很多時候,安裝完成後,服務也啟動了 但是訪問不了 看看是不是防火牆開啟了; 本地試下埠是否可訪問telnet 192.168.4.155 80 CentOS 7預設使用的是firewall作為防火牆,這裡改為iptables防火牆。 firewall: systemc
centos 安裝java到伺服器,並執行部落格系統
申請一個乾淨的vps下面這個命令是 檢視可用的JDK軟體包列表yum search java | grep -i --color JDK繼續敲入命令(注意這裡面的版本的問題,你敲入的不一定跟我的版本是一樣的)yum install -y java-1.8.0-openjdk-
centos 安裝桌面,啟動。
targe 每次 inittab min ln -s 如果 vim evel div 每次都百度,真麻煩,收集起來給自己看 三步搞定 安裝圖形界面 # yum groupinstall "GNOME Desktop" "Graphical Administr
VMware上安裝CentOS系統(本人新手,歡迎大家多多指導和關照)
com top 寫入 部分 安裝目錄 des ide pan div 1.成功安裝VMware Workstation。 2.下載CentOS鏡像。 3.新建一個虛擬機。 4.選擇自定義安裝並單擊下一步(選擇自定義安裝是為了方便自己配置
CentOS7上安裝並配置KVM,以及通過KVM安裝CentOS系統
KVM 虛擬機 CentOS7 虛擬化技術 筆記內容:CentOS7上安裝並配置KVM,以及通過KVM安裝CentOS系統筆記日期:2018-03-07 28.5 Centos7上安裝KVM 28.6 配置網卡 28.7 創建虛擬機安裝CentOS7 28.8 虛擬機管理 Centos7
如何在CentOS 7.2上創建NFS的Share,然後讓Client可以訪問
ofo client IT for sha href setting and server 講得詳細清楚明白的好文。Setting Up an NFS Server and Client on CentOS 7.2https://www.howtoforge.com/tut
CentOS 7 需要安裝的常用工具,及centos安裝fcitx 搜狗輸入法的坑旅
spl gnome2 cloud 進入 load rhel 美化 任務 hit https://blog.csdn.net/tham_/article/details/41868831 Centos常用設置 1.當最大化時隱藏標題欄 或者使用tweak to
centos安裝成功後,不能正常使用ifconfig命令
centos works 使用 ping too 命令 問題 fig net 環境:VMware Workstation 10系統:centos7 64位問題: 系統安裝成功後 不能正常使用ifconfig命令,能不能正常使用ping命令ping www.baidu.com
kubernetes 集群安裝etcd集群,帶證書
cert key mod 信息 ise ESS linux con efi install etcd 準備證書 https://www.kubernetes.org.cn/3096.html 在master1需要安裝CFSSL工具,這將會用來建立 TLS ce
CentOS 7 下 PHP 7,MySQL 5.7 和 Nginx 1.8 的安裝與配置(實用)
下面將一步步在 CentOS 7 下 PHP 7,MySQL 5.7 和 Nginx 1.8 的安裝與配置。首先我的 CentOS 版本是7.0.1406 [[email protected] ~]# lsb_release -a LSB Version:  
安裝istio的Bookinfo,在kubeadm安裝的kubernetes單節點叢集上
安裝叢集看這個 使用kubeadm安裝單節點kubernetes叢集,在vmware虛擬機器centos7 下載istio curl -L https://git.io/getLatestIstio | sh - cd istio-1.0.2 把當前目錄下bin,加入path
centOS安裝node,mysql,apache
一、安裝node 1、下載node二進位制安裝包 wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz 2、解壓 tar xvf node-v10.13.0-linux-x64.tar.xz 3、建立
CENTOS安裝nginx,配置反向代理
安裝 yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake ./configure --prefix=/usr/local/nginx --with-http_stub
CentOS 安裝Python3, pip3 centos7安裝python3.6和pip3
centos7安裝python3.6和pip3 1.yum -y install epel-release 2..執行成功之後,再次執行yum install python-pip 3.對安裝好的pip進行升級 pip install –upgrade pip (注意是兩個短橫線~~) 到這裡pip
CentOS 7安裝破解confluence6.10,使用ldap登入
1.下載地址:https://×××w.atlassian.com/software/confluence/download wget https://product-downloads.atlassian.com/software/confluence/downloads/atl
Centos安裝VMTools,共享資料夾
1.安裝VMware Tools(因為我安裝過了,所以顯示為重新安裝) 2、建立掛載點目錄 mkdir /mnt/cdrom 3、掛在光碟機 mount /dev/cdrom /mnt/cdrom 4、檢視掛在光
kubeadm原始碼分析(內含kubernetes離線包,三步安裝)_Kubernetes中文社群
k8s離線安裝包 三步安裝,簡單到難以置信 kubeadm原始碼分析 說句實在話,kubeadm的程式碼寫的真心一般,質量不是很高。 幾個關鍵點來先說一下kubeadm乾的幾個核心的事: kubeadm 生成證書在/etc/kubernetes/pki目錄下 kubeadm 生成static
centos安裝kafka,以及springboot的整合
下載kafkkafka,http://kafka.apache.org/downloads 我這裡下載的版本是 kafka-1.1.0,檔案: kafka_2.11-1.1.0.tgz 下載後上傳到/usr/local/kafka,並解壓。解壓後文件路徑
如何在window10下安裝FileZilla服務端,然後虛擬機器vb下的centos訪問該伺服器?
知識點 一、Filezilla客戶端作用: 通過服務端提供的ip/username/password,連線服務端 可以將客戶端的檔案上傳到伺服器端事先設定後的共享目錄下(shared directory) 可以在客戶端瀏覽到共享目錄的檔案結構 可以將共享目錄中的檔案