2019安裝k8s詳細教程

愛在南信發表於2019-03-09

前言

學習k8s的第一步肯定是安裝進行實操。但是對於生產環境搭建一個高可用的k8s叢集其實還是有點挑戰難度的,特別是非專業運維開發人員。因為要涉及到的方面很多,預設配置都不能用於生產環境,效能調優,安全驗證等等都是必不可少的。對於入門者來說的話,第一步安裝其實有時候已經把一些人擋在了門外。自己也是費了一點功夫,才搭建了在本地能測試的k8s叢集,用來學習。其中遇到了一些坑,所以記錄一下,希望能幫助到和我遇到一樣問題的朋友。

一.準備工作

1.1.科學上網

推薦自己搭建一個ss服務。弄一個國外伺服器,例如阿里雲海外節點的雲伺服器(ECS)即可.詳細教程大家自行網上搜尋教程。假如遇到國外節點慢,同時又有國內伺服器的,可以我的一遍文章(https://blog.csdn.net/xyz_dream/article/details/87191233),使用國內中繼國外節點,有些情況下能降低延時。

1.2.配置ss客戶端以及設定http, https代理,docker代理

pipy: https://pypi.org/project/shadowsocks/

自己連線國外搭建好的ss伺服器。


sslocal -c config.json -d start  # 連線國外ss伺服器  config.json內容大致如下

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

1.3.使用privoxy將socks5轉為http和https代理


# 安裝privoxy

yum install  privoxy

# vim /etc/privoyx/config 配置檔案  加入內容

forward-socks5 / 127.0.0.1:1080 .

# 啟動 privoxy 代理

systemctl  start  privoxy

1.4.配置系統http https以及docker的https代理


vim .bash_profile

內容:

# 輸入vpn就可以科學上網了

alias vpn='export ALL_PROXY=127.0.0.1:8118  && export http_proxy=127.0.0.1:8188
&& export https_proxy=127.0.0.1:8188'

# 輸入uvpn 關閉科學上網

alias uvpn='unset ALL_PROXY http_proxy https_proxy'

# 測試是否能訪問google  能訪問則會有內容輸出
curl www.google.com


# 配置docker的https代理

官網文件地址:  https://docs.docker.com/config/daemon/systemd/

1. mkdir -p /etc/systemd/system/docker.service.d

2. vim /etc/systemd/system/docker.service.d/https-proxy.conf:

  [Service]
  Environment="HTTPS_PROXY=https://proxy.example.com:443/"

3. systemctl daemon-reload

4. systemctl restart docker


1.5.預先docker pull所需映象

#預先把這些所需映象pull下拉 假如能pull 則docker的https代理生效

docker pull k8s.gcr.io/kube-proxy:v1.13.4
docker pull k8s.gcr.io/kube-apiserver:v1.13.4
docker pull k8s.gcr.io/kube-scheduler:v1.13.4
docker pull k8s.gcr.io/kube-controller-manager:v1.13.4
docker pull k8s.gcr.io/kube-apiserver:v1.13.0
docker pull k8s.gcr.io/coredns:1.2.6
docker pull k8s.gcr.io/etcd:3.2.24
docker pull k8s.gcr.io/pause:3.1

1.6.其他


1.systemctl stop firewalld #暫時關閉防火牆

2.setenforce 0 # 禁用SELINUX

3. vim /etc/sysctl.d/k8s.conf

4. swapoff -a


新增內容:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1


4.配置生效
modprobe br_netfilter

sysctl -p /etc/sysctl.d/k8s.conf

5.
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules \
&& lsmod | grep -e ip_vs -e nf_conntrack_ipv4

二.正式安裝

2.1.安裝docker


yum update -y

yum install -y yum-utils device-mapper-persistent-data lvm2 

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum list docker-ce --showduplicates  #檢視docker版本 選擇版本安裝  我安裝了 18.06.3-ce


systemctl start docker

systemctl enable docker

2.2.安裝k8s

原始碼安裝k8s難度較大,要對k8s十分了解,關於證書頒發,許可權,網路,儲存等等。所以官方推薦使用kubeadm來初始化以及管理k8s叢集。 master節點必須安裝kubectl元件 node節點必須安裝 kubelet元件。


# 1.加入k8s源

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

# 2.yum安裝

yum makecache fast

yum install -y kubelet kubeadm kubectl

# 3.安裝完畢

systemctl enable kubelet.service

# 4.提示補全kubectl命令

yum install -y bash-completion

locate bash_completion
	# 顯示/usr/share/bash-completion/bash_completion

source /usr/share/bash-completion/bash_completion

source <(kubectl completion bash)


2.3.初始化叢集


kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=127.0.0.1

若安裝成功:

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

# 安裝flannel網路外掛

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


#提示:

一般會持續3-4分鐘。  如果一直順利 那麼恭喜你90%完成。如果在kubectl config image pull卡頓

嘗試kuectl config image ls檢視所需安裝的image是否已經pull正確。  若之前準備工作pull的映象版本不正確,
需要重新kubectl cocnfig image pull即可。需要等待時間跟網速有關,一般快的話5-6分鐘,慢的話在10幾分鐘左右。  
只要你之前docker配置https代理正確以及你的科學上網配置正常,那麼應該不會有什麼問題。


2.4.檢查安裝情況


# 1.檢查叢集node是否處於Ready狀態

kubectl get nodes

若處於Ready狀態:  恭喜完成安裝,可以開始玩一些k8s的Demo了!

若處於NotReady狀態:

1.kubectl get pod --all-namespaces # 檢視哪些pod未處於Running狀態

2.檢視未處於Running狀態的pod的詳細

kubectl  describe  pod  未出於Running狀態的pod的名稱 

3. 處於安全考慮 預設master節點不能被排程,現在是測試環境可以讓master被排程

kubectl taint nodes --all node-role.kubernetes.io/master-

具體問題具體網上繼續查詢相關錯誤資訊。不過一般到這一步基本沒問題,一般是pull映象失敗導致的。不過只要你
之前pull映象能拉下來, 那麼可能是時間問題,跟你的網路速度有關係,稍等幾分鐘可能就處於Ready狀態了。

有興趣的童鞋可以關注我的個人部落格: https://mojun.me

相關文章